home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / megasys1.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  122KB  |  3,504 lines

  1. /***************************************************************************
  2.  
  3.                         -= Jaleco Mega System 1 =-
  4.  
  5.                 driver by    Luca Elia (eliavit@unina.it)
  6.  
  7.  
  8. To enter service mode in some games hit 5+F3.
  9.  
  10.  
  11. Game                        Year    System    Dumped by            Supported ?
  12. ---------------------------------------------------------------------------
  13. 64th Street  (World) /        1991    C        AraCORN         *    Yes
  14. 64th Street  (Japan)        1991    C        J-Rom             *    Yes
  15. Astyanax          (World) /    1989    A        -                *    Yes (encrypted)
  16. The Lord of King  (Japan)    1989    A         J-Rom            *    Yes (encrypted)
  17. Avenging Spirit (World) /    1991    B        AraCORN         *    Yes
  18. Phantasm        (Japan)        1990    A        J-Rom             *    Yes (encrypted)
  19. Big Striker                    1992    C        ShinobiZ & COY    *    Yes
  20. Chimera Beast                1993    C        J-Rom             *    Yes
  21. Cybattler                    1993    C        AraCORN            *    Yes
  22. Earth Defense Force            1991    B        AraCORN            *    Yes
  23. Hachoo!                        1989    A        AraCORN         *    Yes (encrypted)
  24. Iga Ninjyutsuden (Japan)    1988    A        J-Rom            *    Yes (encrypted)
  25. Kick Off (Japan)            1988    A        AraCORN            *    Yes
  26. Legend of Makai (World) /    1988    Z        AraCORN                Yes
  27. Makai Densetsu  (Japan)        1988    Z        -                    Yes
  28. P-47  (World) /                1988    A         -                    Yes
  29. P-47  (Japan)                1988    A        J-rom                Yes
  30. Peek-a-Boo!                    1993    D        Bart                Yes
  31. Plus Alpha                    1989    A        J-Rom                 Yes (encrypted)
  32. RodLand  (World) /            1990    A        AraCORN         *    Yes (encrypted)
  33. RodLand  (Japan)            1990    A        -                *    Yes
  34. Saint Dragon                1989    A        J-Rom                 Yes (encrypted)
  35. Soldam (Japan)                1992    A        J-Rom            *    Yes (encrypted)
  36. Takeda Shingen (Japan)        1988    A        J-Rom            *    Yes (encrypted)
  37. ------------------------------------------------------------^--------------
  38.                                                             |
  39.                             The Priority Prom is missing for these games !
  40.  
  41.  
  42.  
  43. Hardware    Main CPU    Sound CPU    Sound Chips
  44. ----------------------------------------------------------------
  45. MS1 - Z        68000        Z80            YM2203c
  46. MS1 - A        68000        68000        YM2151    OKI-M6295 x 2 YM3012
  47. MS1 - B        68000        68000        YM2151    OKI-M6295 x 2 YM3012
  48. MS1 - C        68000        68000        YM2151    OKI-M6295 x 2 YM3012
  49. MS1 - D        68000        -            -        OKI-M6295 x 1
  50. ----------------------------------------------------------------
  51.  
  52.  
  53.  
  54. Main CPU    RW        MS1-A/Z            MS1-B            MS1-C            MS1-D
  55. -----------------------------------------------------------------------------------
  56. ROM            R    000000-03ffff    000000-03ffff    000000-07ffff    000000-03ffff
  57.                                 080000-0bffff
  58. Video Regs     W    084000-0843ff    044000-0443ff    0c0000-0cffff    0c0000-0cffff
  59. Palette        RW    088000-0887ff    048000-0487ff    0f8000-0f87ff    0d8000-0d87ff
  60. Object RAM    RW    08e000-08ffff    04e000-04ffff    0d2000-0d3fff    0ca000-0cbfff
  61. Scroll 0    RW    090000-093fff    050000-053fff    0e0000-0e3fff    0d0000-0d3fff
  62. Scroll 1    RW    094000-097fff    054000-057fff    0e8000-0ebfff    0e8000-0ebfff
  63. Scroll 2    RW    098000-09bfff    058000-05bfff    0f0000-0f3fff    -
  64. Work RAM    RW    0f0000-0fffff*    060000-07ffff*    ff0000-ffffff*    1f0000-1fffff
  65. Input Ports R    080000-080009    0e0000-0e0001**    0d8000-d80001**    100000-100001**
  66. -----------------------------------------------------------------------------------
  67. * Can vary                 ** Through protection.
  68.  
  69.  
  70.  
  71. Sound CPU        RW        MS1-A            MS1-B            MS1-C            MS1-D
  72. -----------------------------------------------------------------------------------
  73. ROM                R    000000-01ffff    000000-01ffff    000000-01ffff     No Sound CPU
  74. Latch #1        R    040000-040001    <                060000-060001
  75. Latch #2         W    060000-060001    <                <
  76. 2151 reg         W    080000-080001    <                <
  77. 2151 data         W    080002-080003    <                <
  78. 2151 status        R     080002-080003    <                <
  79. 6295 #1 data     W     0a0000-0a0003    <                <
  80. 6295 #1 status    R     0a0000-0a0001    <                <
  81. 6295 #2 data     W     0c0000-0c0003    <                <
  82. 6295 #2 status    R     0c0000-0c0001    <                <
  83. RAM                RW    0f0000-0f3fff    0e0000-0effff?    <
  84. -----------------------------------------------------------------------------------
  85.  
  86.  
  87.                                 Issues / To Do
  88.                                 --------------
  89.  
  90. - There's a 512 byte PROM in the video section (different for every game)
  91.   that controls the priorities. It's been dumped for only a few games, so
  92.   we have to fake their data.
  93.  
  94. - Making the M6295 status register return 0 fixes the music tempo in
  95.   avspirit, 64street, astyanax etc. but makes most of the effects in
  96.   hachoo disappear! Define SOUND_HACK to 0 to turn this hack off
  97.  
  98. - Iganinju doesn't work properly: I have to patch lev3 irq and it severely
  99.   slows down at times (and it gets worse if I increase the clock)
  100.  
  101. - Sprite / Sprite and Sprite / Layers priorities must be made orthogonal
  102.   (Hachoo! player passes over the portal at the end of level 2 otherwise)
  103.  
  104. - VERY bad sprite lag in iganinju and plusalph and generally others.
  105.   Is this a sprites buffer issue ?
  106.  
  107. - Understand an handful of unknown bits in video regs
  108.  
  109.  
  110. ***************************************************************************/
  111.  
  112. // This will fix tempo and samples in at least avsprit, 64street, astyanax
  113. // but will break at least one game: hachoo
  114.  
  115. #define SOUND_HACK 1
  116.  
  117. #include "driver.h"
  118. #include "drivers/megasys1.h"
  119. #include "vidhrdw/generic.h"
  120.  
  121.  
  122. /* Variables only used here: */
  123. static int ip_select, ip_select_values[5];
  124.  
  125. /* Variables defined in vidhrdw: */
  126.  
  127. /* Functions defined in vidhrdw: */
  128. void megasys1_convert_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *prom);
  129. int  megasys1_vh_start(void);
  130. void megasys1_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  131. READ_HANDLER( megasys1_vregs_C_r );
  132. WRITE_HANDLER( megasys1_vregs_A_w );
  133. WRITE_HANDLER( megasys1_vregs_C_w );
  134. WRITE_HANDLER( megasys1_vregs_D_w );
  135. WRITE_HANDLER( paletteram_RRRRGGGGBBBBRGBx_word_w );
  136. WRITE_HANDLER( paletteram_RRRRRGGGGGBBBBBx_word_w );
  137.  
  138.  
  139.  
  140. READ_HANDLER( protection_peekaboo_r );
  141. WRITE_HANDLER( protection_peekaboo_w );
  142.  
  143. void megasys1_init_machine(void)
  144. {
  145.     ip_select = 0;    /* reset protection */
  146. }
  147.  
  148.  
  149.  
  150. /*
  151. **
  152. **    Main cpu data
  153. **
  154. **
  155. */
  156.  
  157.  
  158. /***************************************************************************
  159.                         [ Main CPU - System A / Z ]
  160. ***************************************************************************/
  161.  
  162. static READ_HANDLER( coins_r )   {return input_port_0_r(0);}    // < 00 | Coins >
  163. static READ_HANDLER( player1_r ) {return input_port_1_r(0);}    // < 00 | Player 1 >
  164. static READ_HANDLER( player2_r ) {return (input_port_2_r(0)<<8)+input_port_3_r(0);}        // < Reserve | Player 2 >
  165. static READ_HANDLER( dsw1_r )     {return input_port_4_r(0);}                            //   DSW 1
  166. static READ_HANDLER( dsw2_r )     {return input_port_5_r(0);}                            //   DSW 2
  167. static READ_HANDLER( dsw_r )     {return (input_port_4_r(0)<<8)+input_port_5_r(0);}        // < DSW 1 | DSW 2 >
  168.  
  169.  
  170. #define INTERRUPT_NUM_A        3
  171. int interrupt_A(void)
  172. {
  173.     switch ( cpu_getiloops() )
  174.     {
  175.         case 0:        return 3;
  176.         case 1:        return 2;
  177.         case 2:        return 1;
  178.         default:    return ignore_interrupt();
  179.     }
  180. }
  181.  
  182.  
  183.  
  184.  
  185. #define INTERRUPT_NUM_Z        INTERRUPT_NUM_A
  186. #define interrupt_Z            interrupt_A
  187.  
  188.  
  189. #define MEMORYMAP_A(_shortname_,_ram_start_,_ram_end_) \
  190. static struct MemoryReadAddress readmem_##_shortname_[] = \
  191. { \
  192.     { 0x000000, 0x05ffff, MRA_ROM                    }, \
  193.     { _ram_start_, _ram_end_, MRA_BANK1                }, \
  194.     { 0x080000, 0x080001, coins_r                    }, \
  195.     { 0x080002, 0x080003, player1_r                    }, \
  196.     { 0x080004, 0x080005, player2_r                    }, \
  197.     { 0x080006, 0x080007, dsw_r                        }, \
  198.     { 0x080008, 0x080009, soundlatch2_r                }, /* from sound cpu */ \
  199.     { 0x084000, 0x084fff, MRA_BANK2                    }, \
  200.     { 0x088000, 0x0887ff, paletteram_word_r            }, \
  201.     { 0x08e000, 0x08ffff, MRA_BANK3                    }, \
  202.     { 0x090000, 0x093fff, megasys1_scrollram_0_r    }, \
  203.     { 0x094000, 0x097fff, megasys1_scrollram_1_r    }, \
  204.     { 0x098000, 0x09bfff, megasys1_scrollram_2_r    }, \
  205.     { -1 } \
  206. }; \
  207. static struct MemoryWriteAddress writemem_##_shortname_[] = \
  208. { \
  209.      { 0x000000, 0x05ffff, MWA_ROM                                            }, \
  210.     { _ram_start_, _ram_end_, MWA_BANK1,            &megasys1_ram            }, \
  211.     { 0x084000, 0x0843ff, megasys1_vregs_A_w,        &megasys1_vregs            }, \
  212.     { 0x088000, 0x0887ff, paletteram_RRRRGGGGBBBBRGBx_word_w, &paletteram    }, \
  213.     { 0x08e000, 0x08ffff, MWA_BANK3,                &megasys1_objectram        }, \
  214.     { 0x090000, 0x093fff, megasys1_scrollram_0_w,    &megasys1_scrollram_0,0    }, \
  215.     { 0x094000, 0x097fff, megasys1_scrollram_1_w,    &megasys1_scrollram_1,0    }, \
  216.     { 0x098000, 0x09bfff, megasys1_scrollram_2_w,    &megasys1_scrollram_2,0    }, \
  217.     { -1 } \
  218. };
  219.  
  220. #define MEMORYMAP_Z        MEMORYMAP_A
  221.  
  222.  
  223.  
  224. /***************************************************************************
  225.                             [ Main CPU - System B ]
  226. ***************************************************************************/
  227.  
  228. #define INTERRUPT_NUM_B        3
  229. int interrupt_B(void)
  230. {
  231.     switch (cpu_getiloops())
  232.     {
  233.         case 0:        return 4;
  234.         case 1:        return 1;
  235.         default:    return 2;
  236.     }
  237. }
  238.  
  239.  
  240.  
  241. /*             Read the input ports, through a protection device:
  242.  
  243.  ip_select_values must contain the 5 codes sent to the protection device
  244.  in order to obtain the status of the following 5 input ports:
  245.  
  246.          Coins    Player1        Player2        DSW1        DSW2
  247.  
  248.  in that order.            */
  249.  
  250. static READ_HANDLER( ip_select_r )
  251. {
  252. int i;
  253.  
  254. //    Coins    P1        P2        DSW1    DSW2
  255. //    57        53        54        55        56        < 64street
  256. //    37        35        36        33        34        < avspirit
  257. //    58        54        55        56        57        < bigstrik
  258. //    56        52        53        54        55        < cybattlr
  259. //     20        21        22        23        24        < edf
  260.  
  261.     /* f(x) = ((x*x)>>4)&0xFF ; f(f($D)) == 6 */
  262.     if ((ip_select & 0xF0) == 0xF0) return 0x0D;
  263.  
  264.     for (i = 0; i < 5; i++)    if (ip_select == ip_select_values[i]) break;
  265.  
  266.     switch (i)
  267.     {
  268.             case 0x0 :    return coins_r(0);        break;
  269.             case 0x1 :    return player1_r(0);    break;
  270.             case 0x2 :    return player2_r(0);    break;
  271.             case 0x3 :    return dsw1_r(0);        break;
  272.             case 0x4 :    return dsw2_r(0);        break;
  273.             default     :    return 0x06;
  274.     }
  275. }
  276.  
  277. static WRITE_HANDLER( ip_select_w )
  278. {
  279.     ip_select = COMBINE_WORD(ip_select,data);
  280.     cpu_cause_interrupt(0,2);
  281. }
  282.  
  283.  
  284. #define MEMORYMAP_B(_shortname_,_ram_start_,_ram_end_) \
  285. static struct MemoryReadAddress readmem_##_shortname_[] = \
  286. {\
  287.     { 0x000000, 0x03ffff, MRA_ROM                    },\
  288.     { 0x080000, 0x0bffff, MRA_ROM                    },\
  289.     { _ram_start_, _ram_end_,    MRA_BANK1            },\
  290.     { 0x044000, 0x044fff, MRA_BANK2                    },\
  291.     { 0x048000, 0x0487ff, paletteram_word_r            },\
  292.     { 0x04e000, 0x04ffff, MRA_BANK3                    },\
  293.     { 0x050000, 0x053fff, megasys1_scrollram_0_r    },\
  294.     { 0x054000, 0x057fff, megasys1_scrollram_1_r    },\
  295.     { 0x058000, 0x05bfff, megasys1_scrollram_2_r    },\
  296.     { 0x0e0000, 0x0e0001, ip_select_r                },\
  297.     { -1 }\
  298. };\
  299. static struct MemoryWriteAddress writemem_##_shortname_[] = \
  300. {\
  301.      { 0x000000, 0x03ffff, MWA_ROM                                            },\
  302.     { 0x080000, 0x0bffff, MWA_ROM                                            },\
  303.     { _ram_start_, _ram_end_, MWA_BANK1,            &megasys1_ram            },\
  304.     { 0x044000, 0x0443ff, megasys1_vregs_A_w,        &megasys1_vregs            },\
  305.     { 0x048000, 0x0487ff, paletteram_RRRRGGGGBBBBRGBx_word_w, &paletteram    },\
  306.     { 0x04e000, 0x04ffff, MWA_BANK3,                &megasys1_objectram        },\
  307.     { 0x050000, 0x053fff, megasys1_scrollram_0_w ,    &megasys1_scrollram_0    },\
  308.     { 0x054000, 0x057fff, megasys1_scrollram_1_w ,    &megasys1_scrollram_1    },\
  309.     { 0x058000, 0x05bfff, megasys1_scrollram_2_w ,    &megasys1_scrollram_2    },\
  310.     { 0x0e0000, 0x0e0001, ip_select_w                                        },\
  311.     { -1 }\
  312. };\
  313.  
  314.  
  315.  
  316. /***************************************************************************
  317.                             [ Main CPU - System C ]
  318. ***************************************************************************/
  319.  
  320.  
  321. #define INTERRUPT_NUM_C    INTERRUPT_NUM_B
  322. #define interrupt_C        interrupt_B
  323.  
  324. #define MEMORYMAP_C(_shortname_,_ram_start_,_ram_end_) \
  325. static struct MemoryReadAddress readmem_##_shortname_[] = \
  326. {\
  327.     { 0x000000, 0x07ffff, MRA_ROM                    }, \
  328.     { _ram_start_, _ram_end_, MRA_BANK1                }, \
  329.     { 0x0c0000, 0x0cffff, megasys1_vregs_C_r        }, \
  330.     { 0x0d2000, 0x0d3fff, MRA_BANK3                    }, \
  331.     { 0x0e0000, 0x0e3fff, megasys1_scrollram_0_r    }, \
  332.     { 0x0e8000, 0x0ebfff, megasys1_scrollram_1_r    }, \
  333.     { 0x0f0000, 0x0f3fff, megasys1_scrollram_2_r    }, \
  334.     { 0x0f8000, 0x0f87ff, paletteram_word_r            }, \
  335.     { 0x0d8000, 0x0d8001, ip_select_r                }, \
  336.     { -1 } \
  337. }; \
  338. static struct MemoryWriteAddress writemem_##_shortname_[] = \
  339. { \
  340.      { 0x000000, 0x07ffff, MWA_ROM                                            }, \
  341.     { _ram_start_, _ram_end_, MWA_BANK1,            &megasys1_ram            }, \
  342.     { 0x0c0000, 0x0cffff, megasys1_vregs_C_w,        &megasys1_vregs            }, \
  343.     { 0x0d2000, 0x0d3fff, MWA_BANK3,                &megasys1_objectram        }, \
  344.     { 0x0e0000, 0x0e3fff, megasys1_scrollram_0_w,    &megasys1_scrollram_0    }, \
  345.     { 0x0e8000, 0x0ebfff, megasys1_scrollram_1_w,    &megasys1_scrollram_1    }, \
  346.     { 0x0f0000, 0x0f3fff, megasys1_scrollram_2_w,    &megasys1_scrollram_2    }, \
  347.     { 0x0f8000, 0x0f87ff, paletteram_RRRRGGGGBBBBRGBx_word_w, &paletteram    }, \
  348.     { 0x0d8000, 0x0d8001, ip_select_w                                        }, \
  349.     { -1 } \
  350. };
  351.  
  352.  
  353.  
  354.  
  355. /***************************************************************************
  356.                             [ Main CPU - System D ]
  357. ***************************************************************************/
  358.  
  359. #define INTERRUPT_NUM_D        1
  360. int interrupt_D(void)
  361. {
  362.     return 2;
  363. }
  364.  
  365. #define MEMORYMAP_D(_shortname_,_ram_start_,_ram_end_) \
  366. static struct MemoryReadAddress readmem_##_shortname_[] = \
  367. { \
  368.     { 0x000000, 0x03ffff, MRA_ROM                        }, \
  369.     { _ram_start_, _ram_end_, MRA_BANK1                    }, \
  370.     { 0x0c0000, 0x0c9fff, MRA_BANK2                        }, \
  371.     { 0x0ca000, 0x0cbfff, MRA_BANK3                        }, \
  372.     { 0x0d0000, 0x0d3fff, MRA_BANK4                        }, \
  373.     { 0x0d4000, 0x0d7fff, MRA_BANK5                        }, \
  374.     { 0x0d8000, 0x0d87ff, paletteram_word_r                }, \
  375.     { 0x0db000, 0x0db7ff, paletteram_word_r                }, \
  376.     { 0x0e0000, 0x0e0001, dsw_r                            }, \
  377.     { 0x0e8000, 0x0ebfff, MRA_BANK7                        }, \
  378.     { 0x0f0000, 0x0f0001, coins_r                        }, /* Coins + P1&P2 Buttons */ \
  379.     { 0x0f8000, 0x0f8001, OKIM6295_status_0_r            }, \
  380.     { 0x100000, 0x100001, protection_##_shortname_##_r    }, /* Protection */ \
  381.     { -1 } \
  382. }; \
  383. static struct MemoryWriteAddress writemem_##_shortname_[] = \
  384. { \
  385.      { 0x000000, 0x03ffff, MWA_ROM                                            }, \
  386.     { _ram_start_, _ram_end_, MWA_BANK1,            &megasys1_ram            }, \
  387.     { 0x0c0000, 0x0c9fff, megasys1_vregs_D_w,        &megasys1_vregs            }, \
  388.     { 0x0ca000, 0x0cbfff, MWA_BANK3,                 &megasys1_objectram        }, \
  389.     { 0x0d0000, 0x0d3fff, megasys1_scrollram_1_w,    &megasys1_scrollram_1    }, \
  390.     { 0x0d4000, 0x0d7fff, megasys1_scrollram_2_w,    &megasys1_scrollram_2    }, \
  391.     { 0x0d8000, 0x0d87ff, paletteram_RRRRRGGGGGBBBBBx_word_w                }, \
  392.     { 0x0db000, 0x0db7ff, paletteram_RRRRRGGGGGBBBBBx_word_w, &paletteram    }, \
  393.     { 0x0e8000, 0x0ebfff, megasys1_scrollram_0_w,    &megasys1_scrollram_0    }, \
  394.     { 0x0f8000, 0x0f8001, ms_OKIM6295_data_0_w                                }, \
  395.     { 0x100000, 0x100001, protection_##_shortname_##_w                        }, /* Protection */ \
  396.     { -1 } \
  397. };
  398.  
  399.  
  400.  
  401.  
  402. /*
  403. **
  404. **    Sound cpu data
  405. **
  406. **
  407. */
  408.  
  409. /*
  410.                             [ Sound CPU interrupts ]
  411.  
  412.     [MS1-A]
  413.         astyanax                all rte
  414.         hachoo                    all reset the program, but the status
  415.                                 register is set to 2700
  416.         iganinju                all rte
  417.         p47 & p47j                all rte
  418.         phantasm                all rte (4 is different, but rte)
  419.         plusalph                all rte
  420.         rodland    & rodlandj        all rte (4 is different, but rte)
  421.         stdragon                4]read & store sound command and echo to main cpu
  422.                                 rest: rte
  423.     [MS1-B]
  424.         avspirit                all rte (4 is different, but rte)
  425.         edf                        all rte (4 is different, but rte)
  426.  
  427.     [MS1-C]
  428.         64street                all rte (4 is different, but rte)
  429.         chimerab                all rte
  430.         cybattlr
  431.             1;3;5-7]400    busy loop
  432.             2]40c    read & store sound command and echo to main cpu
  433.             4]446    rte
  434.  
  435.  
  436.  These games almost always don't use the interrupts to drive the music
  437.  tempo (cybattlr and stdragon do!) but use the YM2151 timers instead
  438.  (they poll the status register). Since those timers are affected by
  439.  the YM2151 clock, it's this latter that ultimately decides the music
  440.  tempo.
  441.  
  442.  Note that some games' music is severely slowed down and out of sync
  443.  (avspirit, 64street) by the fact that the game waits for some samples
  444.  to be played entirely (M6295 status register polled) but they take
  445.  too much time (and raising the M6295 clock rate would, on the other
  446.  hand, screw the pitch of the samples)
  447.  
  448.  A temporary fix is to make the status of this chip return 0...
  449.  unfortunately, this trick makes most of the effects disappear in at
  450.  least one game: hachoo!
  451.  
  452. */
  453.  
  454. /* See stdragon, which is interrupt driven */
  455. #define SOUND_INTERRUPT_NUM        8
  456. static int sound_interrupt(void)
  457. {
  458.     return 4;
  459. }
  460.  
  461.  
  462. WRITE_HANDLER( ms_YM2151_register_port_0_w )
  463. {
  464.     if ((data & 0x00ff0000) == 0)    YM2151_register_port_0_w(0,data & 0xff);
  465.     else                            logerror("%06x: write %02x to YM2151_register_port_0_w\n",cpu_get_pc(),data);
  466. }
  467.  
  468. WRITE_HANDLER( ms_YM2151_data_port_0_w )
  469. {
  470.     if ((data & 0x00ff0000) == 0)    YM2151_data_port_0_w(0,data & 0xff);
  471.     else                            logerror("%06x: write %02x to YM2151_data_port_0_w\n",cpu_get_pc(),data);
  472. }
  473.  
  474. WRITE_HANDLER( ms_OKIM6295_data_0_w )
  475. {
  476.     if ((data & 0x00ff0000) == 0)    OKIM6295_data_0_w(0,data & 0xff);
  477.     else                            logerror("%06x: write %02x to OKIM6295_data_0_w\n",cpu_get_pc(),data);
  478. }
  479.  
  480. WRITE_HANDLER( ms_OKIM6295_data_1_w )
  481. {
  482.     if ((data & 0x00ff0000) == 0)    OKIM6295_data_1_w(0,data & 0xff);
  483.     else                            logerror("%06x: write %02x to OKIM6295_data_1_w\n",cpu_get_pc(),data);
  484. }
  485.  
  486.  
  487.  
  488. WRITE_HANDLER( ms_soundlatch_w )
  489. {
  490.     static unsigned char val[2];
  491.     COMBINE_WORD_MEM(val,data);
  492.     soundlatch_w(0, READ_WORD(val) );
  493. }
  494.  
  495. WRITE_HANDLER( ms_soundlatch2_w )
  496. {
  497.     static unsigned char val[2];
  498.     COMBINE_WORD_MEM(val,data);
  499.     soundlatch2_w(0, READ_WORD(val) );
  500. }
  501.  
  502. /***************************************************************************
  503.                             [ Sound CPU - System A ]
  504. ***************************************************************************/
  505.  
  506.  
  507. static struct MemoryReadAddress sound_readmem_A[] =
  508. {
  509.     { 0x000000, 0x01ffff, MRA_ROM                    },
  510.     { 0x040000, 0x040001, soundlatch_r                },
  511.     { 0x080002, 0x080003, YM2151_status_port_0_r    },
  512. #if SOUND_HACK
  513.     { 0x0a0000, 0x0a0001, MRA_NOP                    },
  514.     { 0x0c0000, 0x0c0001, MRA_NOP                    },
  515. #else
  516.     { 0x0a0000, 0x0a0001, OKIM6295_status_0_r        },
  517.     { 0x0c0000, 0x0c0001, OKIM6295_status_1_r        },
  518. #endif
  519.     { 0x0e0000, 0x0fffff, MRA_BANK8                    },
  520.     { -1 }
  521. };
  522.  
  523. static struct MemoryWriteAddress sound_writemem_A[] =
  524. {
  525.     { 0x000000, 0x01ffff, MWA_ROM                        },
  526.     { 0x060000, 0x060001, ms_soundlatch2_w                },    // to main cpu
  527.     { 0x080000, 0x080001, ms_YM2151_register_port_0_w    },
  528.     { 0x080002, 0x080003, ms_YM2151_data_port_0_w        },
  529.     { 0x0a0000, 0x0a0003, ms_OKIM6295_data_0_w            },
  530.     { 0x0c0000, 0x0c0003, ms_OKIM6295_data_1_w            },
  531.     { 0x0e0000, 0x0fffff, MWA_BANK8                        },
  532.     { -1 }
  533. };
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540. /***************************************************************************
  541.                         [ Sound CPU - System B / C ]
  542. ***************************************************************************/
  543.  
  544.  
  545. static struct MemoryReadAddress sound_readmem_B[] =
  546. {
  547.     { 0x000000, 0x01ffff, MRA_ROM                    },
  548.     { 0x040000, 0x040001, soundlatch_r                },    /* from main cpu */
  549.     { 0x060000, 0x060001, soundlatch_r                },    /* from main cpu */
  550.     { 0x080002, 0x080003, YM2151_status_port_0_r    },
  551. #if SOUND_HACK
  552.     { 0x0a0000, 0x0a0001, MRA_NOP                    },
  553.     { 0x0c0000, 0x0c0001, MRA_NOP                    },
  554. #else
  555.     { 0x0a0000, 0x0a0001, OKIM6295_status_0_r        },
  556.     { 0x0c0000, 0x0c0001, OKIM6295_status_1_r        },
  557. #endif
  558.     { 0x0e0000, 0x0effff, MRA_BANK8                    },
  559.     { -1 }
  560. };
  561.  
  562. static struct MemoryWriteAddress sound_writemem_B[] =
  563. {
  564.     { 0x000000, 0x01ffff, MWA_ROM                        },
  565.     { 0x040000, 0x040001, ms_soundlatch2_w                },    /* to main cpu */
  566.     { 0x060000, 0x060001, ms_soundlatch2_w                },    /* to main cpu */
  567.     { 0x080000, 0x080001, ms_YM2151_register_port_0_w    },
  568.     { 0x080002, 0x080003, ms_YM2151_data_port_0_w        },
  569.     { 0x0a0000, 0x0a0003, ms_OKIM6295_data_0_w            },
  570.     { 0x0c0000, 0x0c0003, ms_OKIM6295_data_1_w            },
  571.     { 0x0e0000, 0x0effff, MWA_BANK8                        },
  572.     { -1 }
  573. };
  574.  
  575. #define sound_readmem_C        sound_readmem_B
  576. #define sound_writemem_C    sound_writemem_B
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583. /***************************************************************************
  584.                         [ Sound CPU - System Z ]
  585. ***************************************************************************/
  586.  
  587.  
  588.  
  589. static struct MemoryReadAddress sound_readmem_z80[] =
  590. {
  591.     { 0x0000, 0x3fff, MRA_ROM        },
  592.     { 0xc000, 0xc7ff, MRA_RAM        },
  593.     { 0xe000, 0xe000, soundlatch_r    },
  594.     { -1 }
  595. };
  596.  
  597. static struct MemoryWriteAddress sound_writemem_z80[] =
  598. {
  599.     { 0x0000, 0x3fff, MWA_ROM    },
  600.     { 0xc000, 0xc7ff, MWA_RAM    },
  601.     { 0xf000, 0xf000, MWA_NOP    }, /* ?? */
  602.     { -1 }
  603. };
  604.  
  605.  
  606. static struct IOReadPort sound_readport[] =
  607. {
  608.     { 0x00, 0x00, YM2203_status_port_0_r    },
  609.     { -1 }
  610. };
  611.  
  612. static struct IOWritePort sound_writeport[] =
  613. {
  614.     { 0x00, 0x00, YM2203_control_port_0_w    },
  615.     { 0x01, 0x01, YM2203_write_port_0_w        },
  616.     { -1 }
  617. };
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625. /*
  626. **
  627. **    Gfx data
  628. **
  629. */
  630.  
  631. /* Tiles are 8x8 */
  632. MEGASYS1_LAYOUT_8x8( tilelayout_01, 0x010000 )
  633. MEGASYS1_LAYOUT_8x8( tilelayout_02, 0x020000 )
  634. MEGASYS1_LAYOUT_8x8( tilelayout_08, 0x080000 )
  635.  
  636. /* Sprites are 16x16 - formed by four 8x8 tiles */
  637. MEGASYS1_LAYOUT_16x16_QUAD( spritelayout_02, 0x020000 )    // MS1 Z
  638. MEGASYS1_LAYOUT_16x16_QUAD( spritelayout_08, 0x080000 )    // MS1 A & B
  639. MEGASYS1_LAYOUT_16x16_QUAD( spritelayout_10, 0x100000 )    // MS1 C
  640.  
  641.  
  642. static struct GfxDecodeInfo gfxdecodeinfo_Z[] =
  643. {
  644.     { REGION_GFX1, 0, &tilelayout_02,    256*0, 16 },    // [0] Scroll 0
  645.     { REGION_GFX2, 0, &tilelayout_01,    256*2, 16 },    // [1] Scroll 1
  646.     { REGION_GFX3, 0, &spritelayout_02,    256*1, 16 },    // [2] Sprites
  647.     { -1 }
  648. };
  649.  
  650. static struct GfxDecodeInfo gfxdecodeinfo_A[] =
  651. {
  652.     { REGION_GFX1, 0, &tilelayout_08,    256*0, 16 },    // [0] Scroll 0
  653.     { REGION_GFX2, 0, &tilelayout_08,    256*1, 16 },    // [1] Scroll 1
  654.     { REGION_GFX3, 0, &tilelayout_02,    256*2, 16 },    // [2] Scroll 2
  655.     { REGION_GFX4, 0, &spritelayout_08,    256*3, 16 },    // [3] Sprites
  656.     { -1 }
  657. };
  658.  
  659. #define gfxdecodeinfo_B        gfxdecodeinfo_A
  660.  
  661. static struct GfxDecodeInfo gfxdecodeinfo_C[] =
  662. {
  663.     { REGION_GFX1, 0, &tilelayout_08,    256*0, 16 },    // [0] Scroll 0
  664.     { REGION_GFX2, 0, &tilelayout_08,    256*1, 16 },    // [1] Scroll 1
  665.     { REGION_GFX3, 0, &tilelayout_02,    256*2, 16 },    // [2] Scroll 2
  666.     { REGION_GFX4, 0, &spritelayout_10,    256*3, 16 },    // [3] Sprites
  667.     { -1 }
  668. };
  669.  
  670. static struct GfxDecodeInfo gfxdecodeinfo_D[] =
  671. {
  672.     { REGION_GFX1, 0, &tilelayout_08,    256*0, 16 },    // [0] scroll 0
  673.     { REGION_GFX2, 0, &tilelayout_08,    256*1, 16 },    // [1] scroll 1
  674.     { REGION_GFX3, 0, &tilelayout_01,    256*1, 16 },    // [2] UNUSED
  675.     { REGION_GFX4, 0, &spritelayout_08,    256*3, 16 },    // [3] sprites
  676.     { -1 }
  677. };
  678.  
  679.  
  680. /***************************************************************************
  681.  
  682.                             Machine Driver Macros
  683.  
  684. ***************************************************************************/
  685.  
  686. /***************************************************************************
  687.  
  688.                         [  Mega System 1 A,B and C ]
  689.  
  690.                           2x68000 2xM6295 1xYM2151
  691.  
  692. ***************************************************************************/
  693.  
  694. #define MEGASYS1_MACHINE(    _type_, \
  695.                             _shortname_,_main_clock_,_sound_clock_, \
  696.                             _fm_clock_,_oki1_clock_,_oki2_clock_) \
  697. static struct YM2151interface ym2151_interface_##_shortname_ = \
  698. { \
  699.     1, \
  700.     _fm_clock_, \
  701.     { YM3012_VOL(80,MIXER_PAN_LEFT,80,MIXER_PAN_RIGHT) }, \
  702.     { 0 } \
  703. }; \
  704.  \
  705. static struct OKIM6295interface okim6295_interface_##_shortname_ = \
  706. { \
  707.     2, \
  708.     {_oki1_clock_, _oki2_clock_},\
  709.     { REGION_SOUND1, REGION_SOUND2 }, \
  710.     { 30, 30 } \
  711. }; \
  712.  \
  713. static struct MachineDriver machine_driver_##_shortname_ = \
  714. { \
  715.     { \
  716.         { \
  717.             CPU_M68000, \
  718.             _main_clock_, \
  719.             readmem_##_shortname_,writemem_##_shortname_,0,0, \
  720.             interrupt_##_type_,INTERRUPT_NUM_##_type_ \
  721.         }, \
  722.         { \
  723.             CPU_M68000 | CPU_AUDIO_CPU, \
  724.             _sound_clock_, \
  725.             sound_readmem_##_type_,sound_writemem_##_type_,0,0, \
  726.             sound_interrupt,SOUND_INTERRUPT_NUM, \
  727.         }, \
  728.     }, \
  729.     60, DEFAULT_60HZ_VBLANK_DURATION, \
  730.     1, \
  731.     megasys1_init_machine, \
  732.     /* video hardware */ \
  733.     256, 256,{ 0, 256-1, 0+16, 256-16-1 }, \
  734.     gfxdecodeinfo_##_type_, \
  735.     1024, 1024, \
  736.     megasys1_convert_prom, \
  737.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE, \
  738.     0, \
  739.     megasys1_vh_start, \
  740.     0, \
  741.     megasys1_vh_screenrefresh, \
  742.     /* sound hardware */ \
  743.     0,0,0,0, \
  744.     { \
  745.         { \
  746.             SOUND_YM2151, \
  747.             &ym2151_interface_##_shortname_ \
  748.         },\
  749.         {\
  750.             SOUND_OKIM6295, \
  751.             &okim6295_interface_##_shortname_ \
  752.         } \
  753.     } \
  754. };
  755.  
  756. #define MEGASYS1_MACHINE_A    MEGASYS1_MACHINE
  757. #define MEGASYS1_MACHINE_B    MEGASYS1_MACHINE
  758. #define MEGASYS1_MACHINE_C    MEGASYS1_MACHINE
  759.  
  760.  
  761. /***************************************************************************
  762.  
  763.                             [ Mega System 1 D ]
  764.  
  765.                               1x68000 1xM6295
  766.  
  767. ***************************************************************************/
  768.  
  769.  
  770. #define MEGASYS1_MACHINE_D(    _type_, \
  771.                             _shortname_,_main_clock_,_sound_clock_, \
  772.                             _fm_clock_,_oki1_clock_,_oki2_clock_) \
  773. static struct OKIM6295interface okim6295_interface_##_shortname_ = \
  774. { \
  775.     1, \
  776.     {_oki1_clock_},\
  777.     { REGION_SOUND1 }, \
  778.     { 100 } \
  779. }; \
  780.  \
  781. static struct MachineDriver machine_driver_##_shortname_ = \
  782. { \
  783.     {\
  784.         {\
  785.             CPU_M68000,\
  786.             _main_clock_, \
  787.             readmem_##_shortname_,writemem_##_shortname_,0,0, \
  788.             interrupt_##_type_,INTERRUPT_NUM_##_type_ \
  789.         } \
  790.     },\
  791.     60,DEFAULT_60HZ_VBLANK_DURATION,\
  792.     1,\
  793.     megasys1_init_machine,\
  794.     /* video hardware */ \
  795.     256, 256,{ 0, 256-1, 0+16, 256-16-1 },\
  796.     gfxdecodeinfo_##_type_,\
  797.     1024, 1024,\
  798.     megasys1_convert_prom,\
  799.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,\
  800.     0,\
  801.     megasys1_vh_start,\
  802.     0,\
  803.     megasys1_vh_screenrefresh,\
  804.     /* sound hardware */ \
  805.     0,0,0,0,\
  806.     { \
  807.         {\
  808.             SOUND_OKIM6295, \
  809.             &okim6295_interface_##_shortname_ \
  810.         } \
  811.     }\
  812. };
  813.  
  814.  
  815.  
  816.  
  817. /***************************************************************************
  818.  
  819.                             [  Mega System 1 Z ]
  820.  
  821.                              68000+Z80 1xYM2203
  822.  
  823. ***************************************************************************/
  824.  
  825.  
  826. static void irq_handler(int irq)
  827. {
  828.     cpu_set_irq_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE);
  829. }
  830.  
  831.  
  832. #define MEGASYS1_MACHINE_Z(    _type_, \
  833.                             _shortname_,_main_clock_,_sound_clock_, \
  834.                             _fm_clock_,_oki1_clock_,_oki2_clock_) \
  835. static struct YM2203interface ym2203_interface_##_shortname_ = \
  836. { \
  837.     1, \
  838.     _fm_clock_, \
  839.     { YM2203_VOL(50,50) }, \
  840.     { 0 }, \
  841.     { 0 }, \
  842.     { 0    }, \
  843.     { 0 }, \
  844.     { irq_handler } \
  845. }; \
  846. \
  847. static struct MachineDriver machine_driver_##_shortname_ = \
  848. {\
  849.     {\
  850.         {\
  851.             CPU_M68000,\
  852.             _main_clock_, \
  853.             readmem_##_shortname_,writemem_##_shortname_,0,0, \
  854.             interrupt_##_type_,INTERRUPT_NUM_##_type_ \
  855.         },\
  856.         {\
  857.             CPU_Z80 | CPU_AUDIO_CPU,\
  858.             _sound_clock_, \
  859.             sound_readmem_z80,sound_writemem_z80,sound_readport,sound_writeport,\
  860.             ignore_interrupt,1    /* irq generated by YM2203 */    \
  861.         },\
  862.     },\
  863.     60,DEFAULT_60HZ_VBLANK_DURATION,\
  864.     1,\
  865.     0,\
  866.     /* video hardware */ \
  867.     256, 256,{ 0, 256-1, 0+16, 256-16-1 },\
  868.     gfxdecodeinfo_Z,\
  869.     256*3, 256*3,\
  870.     0    /*megasys1_convert_prom*/,\
  871.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,\
  872.     0,\
  873.     megasys1_vh_start,\
  874.     0,\
  875.     megasys1_vh_screenrefresh,\
  876.     /* sound hardware */ \
  877.     0,0,0,0,\
  878.     {\
  879.         { \
  880.             SOUND_YM2203, \
  881.             &ym2203_interface_##_shortname_ \
  882.         },\
  883.     }\
  884. };
  885.  
  886.  
  887.  
  888.  
  889.  
  890. /***************************************************************************
  891.  
  892.                             Game Driver Macros
  893.  
  894. ***************************************************************************/
  895.  
  896.  
  897.  
  898. /* Provided by Jim Hernandez: 3.5MHz for FM, 30KHz (!) for ADPCM */
  899. #define STD_FM_CLOCK    3500000
  900. #define STD_OKI_CLOCK      30000
  901.  
  902.  
  903. /*
  904.  
  905.  This is a general purpose macro to define a game.
  906.  
  907.  There is a different macro for clones (defined below), but if the
  908.  parent and clone game run on different hardwares, you can use this
  909.  macro for the clone (to describe its hardware) and specify the
  910.  parent's driver as a parameter
  911.  
  912. */
  913. #define MEGASYS1_GAME(_shortname_, \
  914.                       _type_,_ram_start_, _ram_end_, \
  915.                       _main_clock_,_sound_clock_, \
  916.                       _fm_clock_,_oki1_clock_,_oki2_clock_) \
  917.  \
  918.     MEMORYMAP_##_type_(_shortname_,_ram_start_,_ram_end_) \
  919.  \
  920.     MEGASYS1_MACHINE_##_type_(    _type_, \
  921.                                 _shortname_,_main_clock_,_sound_clock_, \
  922.                                 _fm_clock_,_oki1_clock_,_oki2_clock_)
  923.  
  924.  
  925. /* OSC:    ? (Main 12, Sound 10 MHz according to KLOV) */
  926. MEGASYS1_GAME(    64street, C,0xff0000,0xffffff,
  927.                 12000000,8000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  928.  
  929. /* OSC:    ? */
  930. MEGASYS1_GAME(    astyanax, A,0xff0000,0xffffff,
  931.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  932.  
  933. /* OSC:    8,12,7 MHz */
  934. MEGASYS1_GAME(    avspirit, B,0x070000,0x07ffff,
  935.                 12000000,8000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  936.  
  937. /* This is a clone of Avenging Spirit but runs on different hardware */
  938. /* OSC: same as avspirit(8,12,7 MHz)? (Music tempo driven by timers of the 2151) */
  939. MEGASYS1_GAME(    phantasm, A,0xff0000,0xffffff,
  940.                 12000000,8000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  941.  
  942. /* OSC: 7.000 MHz + 24.000 MHz */
  943. MEGASYS1_GAME(    bigstrik, C,0xff0000,0xffffff,
  944.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  945.  
  946. /* OSC:    ? */
  947. MEGASYS1_GAME(    chimerab, C,0xff0000,0xffffff,
  948.                 12000000,8000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  949.  
  950. /* OSC:    ? */
  951. MEGASYS1_GAME(    cybattlr, C,0x1f0000,0x01fffff,
  952.                 12000000,8000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  953.  
  954. /* OSC:    8,12,7 MHz */
  955. MEGASYS1_GAME(    edf, B,0x060000,0x07ffff,
  956.                 12000000,8000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  957.  
  958. /* OSC:    4,7,12 MHz */
  959. MEGASYS1_GAME(    hachoo, A,0x0f0000,0x0fffff,
  960.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  961.  
  962. /* OSC:    ? */
  963. MEGASYS1_GAME(    iganinju, A,0x0f0000,0x0fffff,
  964.                 7000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  965. // This game doesn't work properly: it severely slows down (and gets worse bumping the clock)
  966.  
  967. /* OSC:    4, 7, 12 MHz */
  968. MEGASYS1_GAME(    kickoff, A,0x0f0000,0x0fffff,
  969.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  970.  
  971. /* OSC:    5,12 MHz */
  972. MEGASYS1_GAME(    lomakai, Z,0x0f0000,0x0fffff,
  973.                 6000000,3000000,    1200000,0,0 )    // no oki chips
  974.  
  975. /*
  976.  OSC:    ? (YM2151 timers drive the music tempo)
  977.  
  978.  KLOV: This game is based on a standard Jaleco platform (using twin 68K CPU's) that is
  979.  used on a few other games (e.g. Astyanax). It is coded MB8842 with an MB8843 ROM
  980.  daughter card. Changing the ROM card changes the game.
  981. */
  982. MEGASYS1_GAME(    p47, A,0x0f0000,0x0fffff,
  983.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  984.  
  985. /* OSC:    ? */
  986. /* KLOV: Jaleco board no. PB-92127A. Main CPU: Motorola 68000P10 */
  987. MEGASYS1_GAME(    peekaboo, D,0x1f0000,0x1fffff,
  988.                 10000000,0,    0,12000,0 )    // 1 cpu, no fm, 1 oki
  989.  
  990. /* OSC:    ? */
  991. MEGASYS1_GAME(    plusalph, A,0x0f0000,0x0fffff,
  992.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  993.  
  994. /* OSC:    4,12,7 MHz */
  995. MEGASYS1_GAME(    rodland, A,0x0f0000,0x0fffff,
  996.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  997.  
  998. /* OSC:    ? */
  999. MEGASYS1_GAME(    stdragon, A,0x0f0000,0x0fffff,
  1000.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  1001.  
  1002.  
  1003. /* OSC:    ? */
  1004. MEGASYS1_GAME(    soldamj, A,0x0f0000,0x0fffff,
  1005.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  1006.  
  1007.  
  1008. /* OSC:    ? */
  1009. MEGASYS1_GAME(    tshingen, A, 0x0f0000, 0x0fffff,
  1010.                 12000000,7000000,STD_FM_CLOCK,STD_OKI_CLOCK,STD_OKI_CLOCK )
  1011.  
  1012.  
  1013.  
  1014. /***************************************************************************
  1015.  
  1016.                                 ROMs Loading
  1017.  
  1018. ***************************************************************************/
  1019.  
  1020.  
  1021.  
  1022. /***************************************************************************
  1023.  
  1024.                             [ 64th Street ]
  1025.  
  1026. (World version)
  1027. interrupts:    1] 10eac:    disabled while b6c4=6 (10fb6 test)
  1028.                         if (8b1c)    8b1c<-0
  1029.                             color cycle
  1030.                             copies 800 bytes 98da->8008
  1031.  
  1032.             2] 10f28:    switch b6c4
  1033.                         0    RTE
  1034.                         2    10f44:    M[b6c2]<-d8000; b6c4<-4
  1035.                         4    10f6c:    next b6c2 & d8000.    if (b6c2>A)    b6c2,4<-0
  1036.                                                         else        b6c4  <-2
  1037.                         6    10f82: b6c6<-(d8001) b6c7<-FF (test)
  1038.  
  1039.             4] 10ed0:    disabled while b6c4=6 (10fb6 test)
  1040.                         watchdog 8b1e
  1041.                         many routines...
  1042.                         b6c2<-0
  1043.  
  1044. 13ca    print a string: a7->screen disp.l(base=f0004),src.l
  1045. 13ea    print a string: a1->(chars)*
  1046. 1253c    hw test (table of tests at 125c6)        *TRAP#D*
  1047. 125f8    mem test (table of mem tests at 126d4)
  1048. 1278e    input test (table of tests at 12808)
  1049. 128a8    sound test    12a08    crt test
  1050. 12aca    dsw test (b68e.w = dswa.b|dswb.b)
  1051.  
  1052. ff8b1e.w    incremented by int4, when >= b TRAP#E (software watchdog error)
  1053. ff9df8.w    *** level ***
  1054.  
  1055. ***************************************************************************/
  1056.  
  1057. #define ROM_LOAD_64STREET \
  1058.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */ \
  1059.     ROM_LOAD_EVEN( "64th_08.rom", 0x000000, 0x010000, 0x632be0c1 ) \
  1060.     ROM_LOAD_ODD(  "64th_07.rom", 0x000000, 0x010000, 0x13595d01 ) \
  1061. \
  1062.     ROM_REGION( 0x80000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */ \
  1063.     ROM_LOAD( "64th_01.rom", 0x000000, 0x080000, 0x06222f90 ) \
  1064. \
  1065.     ROM_REGION( 0x80000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */ \
  1066.     ROM_LOAD( "64th_06.rom", 0x000000, 0x080000, 0x2bfcdc75 ) \
  1067. \
  1068.     ROM_REGION( 0x20000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */ \
  1069.     ROM_LOAD( "64th_09.rom", 0x000000, 0x020000, 0xa4a97db4 ) \
  1070. \
  1071.     ROM_REGION( 0x100000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */ \
  1072.     ROM_LOAD( "64th_05.rom", 0x000000, 0x080000, 0xa89a7020 ) \
  1073.     ROM_LOAD( "64th_04.rom", 0x080000, 0x080000, 0x98f83ef6 ) \
  1074. \
  1075.     ROM_REGION( 0x40000, REGION_SOUND1 )        /* Samples */ \
  1076.     ROM_LOAD( "64th_11.rom", 0x000000, 0x020000, 0xb0b8a65c ) \
  1077. \
  1078.     ROM_REGION( 0x40000, REGION_SOUND2 )        /* Samples */ \
  1079.     ROM_LOAD( "64th_10.rom", 0x000000, 0x040000, 0xa3390561 ) \
  1080. \
  1081.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */ \
  1082.     ROM_LOAD( "prom",        0x0000, 0x0200, 0x00000000 )
  1083.  
  1084.  
  1085. ROM_START( 64street )
  1086.  
  1087.     ROM_REGION( 0x80000, REGION_CPU1 )        /* Main CPU Code */
  1088.     ROM_LOAD_EVEN( "64th_03.rom", 0x000000, 0x040000, 0xed6c6942 )
  1089.     ROM_LOAD_ODD(  "64th_02.rom", 0x000000, 0x040000, 0x0621ed1d )
  1090.  
  1091.     ROM_LOAD_64STREET
  1092.  
  1093. ROM_END
  1094.  
  1095.  
  1096. ROM_START( 64streej )
  1097.  
  1098.     ROM_REGION( 0x80000, REGION_CPU1 )        /* Main CPU Code */
  1099.     ROM_LOAD_EVEN( "91105-3.bin", 0x000000, 0x040000, 0xa211a83b )
  1100.     ROM_LOAD_ODD(  "91105-2.bin", 0x000000, 0x040000, 0x27c1f436 )
  1101.  
  1102.     ROM_LOAD_64STREET
  1103.  
  1104. ROM_END
  1105.  
  1106.  
  1107.  
  1108. INPUT_PORTS_START( 64street )
  1109.     COINS
  1110. //    fire    jump
  1111.     JOY_2BUTTONS(IPF_PLAYER1)
  1112.     RESERVE                // Unused
  1113.     JOY_2BUTTONS(IPF_PLAYER2)
  1114.  
  1115.     PORT_START
  1116.     COINAGE_8BITS
  1117.  
  1118.     PORT_START
  1119.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )
  1120.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  1121.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1122.     PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
  1123.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  1124.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1125.     PORT_DIPNAME( 0x04, 0x04, "Allow Continue" )
  1126.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  1127.     PORT_DIPSETTING(    0x04, DEF_STR( On ) )
  1128.     PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) )
  1129.     PORT_DIPSETTING(    0x10, "Easy" )
  1130.     PORT_DIPSETTING(    0x18, "Normal" )
  1131.     PORT_DIPSETTING(    0x08, "Hard" )
  1132.     PORT_DIPSETTING(    0x00, "Hardest" )
  1133.     PORT_DIPNAME( 0x60, 0x20, DEF_STR( Lives ) )
  1134.     PORT_DIPSETTING(    0x40, "1" )
  1135.     PORT_DIPSETTING(    0x60, "2" )
  1136.     PORT_DIPSETTING(    0x20, "3" )
  1137.     PORT_DIPSETTING(    0x00, "5" )
  1138.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  1139.  
  1140. INPUT_PORTS_END
  1141.  
  1142. static void init_64street(void)
  1143. {
  1144. //    unsigned char *RAM = memory_region(REGION_CPU1);
  1145. //    WRITE_WORD (&RAM[0x006b8],0x6004);        // d8001 test
  1146. //    WRITE_WORD (&RAM[0x10EDE],0x6012);        // watchdog
  1147.  
  1148.     ip_select_values[0] = 0x57;
  1149.     ip_select_values[1] = 0x53;
  1150.     ip_select_values[2] = 0x54;
  1151.     ip_select_values[3] = 0x55;
  1152.     ip_select_values[4] = 0x56;
  1153. }
  1154.  
  1155.  
  1156. /***************************************************************************
  1157.  
  1158.                     [ The Astyanax ] / [ The Lord of King ]
  1159.  
  1160. interrupts:    1] 1aa    2] 1b4
  1161.  
  1162. ***************************************************************************/
  1163.  
  1164.  
  1165. #define ASTYANAX_ROM_LOAD \
  1166. \
  1167.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */ \
  1168.     ROM_LOAD_EVEN( "astyan5.bin",  0x000000, 0x010000, 0x11c74045 ) \
  1169.     ROM_LOAD_ODD(  "astyan6.bin",  0x000000, 0x010000, 0xeecd4b16 ) \
  1170. \
  1171.     ROM_REGION( 0x80000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */ \
  1172.     ROM_LOAD( "astyan11.bin", 0x000000, 0x020000, 0x5593fec9 ) \
  1173.     ROM_LOAD( "astyan12.bin", 0x020000, 0x020000, 0xe8b313ec ) \
  1174.     ROM_LOAD( "astyan13.bin", 0x040000, 0x020000, 0x5f3496c6 ) \
  1175.     ROM_LOAD( "astyan14.bin", 0x060000, 0x020000, 0x29a09ec2 ) \
  1176. \
  1177.     ROM_REGION( 0x80000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */ \
  1178.     ROM_LOAD( "astyan15.bin", 0x000000, 0x020000, 0x0d316615 ) \
  1179.     ROM_LOAD( "astyan16.bin", 0x020000, 0x020000, 0xba96e8d9 ) \
  1180.     ROM_LOAD( "astyan17.bin", 0x040000, 0x020000, 0xbe60ba06 ) \
  1181.     ROM_LOAD( "astyan18.bin", 0x060000, 0x020000, 0x3668da3d ) \
  1182. \
  1183.     ROM_REGION( 0x20000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */ \
  1184.     ROM_LOAD( "astyan19.bin", 0x000000, 0x020000, 0x98158623 ) \
  1185. \
  1186.     ROM_REGION( 0x80000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */ \
  1187.     ROM_LOAD( "astyan20.bin", 0x000000, 0x020000, 0xc1ad9aa0 ) \
  1188.     ROM_LOAD( "astyan21.bin", 0x020000, 0x020000, 0x0bf498ee ) \
  1189.     ROM_LOAD( "astyan22.bin", 0x040000, 0x020000, 0x5f04d9b1 ) \
  1190.     ROM_LOAD( "astyan23.bin", 0x060000, 0x020000, 0x7bd4d1e7 ) \
  1191. \
  1192.     ROM_REGION( 0x40000, REGION_SOUND1 )        /* Samples */ \
  1193.     ROM_LOAD( "astyan9.bin",  0x000000, 0x020000, 0xa10b3f17 ) \
  1194.     ROM_LOAD( "astyan10.bin", 0x020000, 0x020000, 0x4f704e7a ) \
  1195. \
  1196.     ROM_REGION( 0x40000, REGION_SOUND2 )        /* Samples */ \
  1197.     ROM_LOAD( "astyan7.bin",  0x000000, 0x020000, 0x319418cc ) \
  1198.     ROM_LOAD( "astyan8.bin",  0x020000, 0x020000, 0x5e5d2a22 ) \
  1199. \
  1200.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */ \
  1201.     ROM_LOAD( "prom",         0x0000, 0x0200, 0x00000000 )
  1202.  
  1203.  
  1204. ROM_START( astyanax )
  1205.  
  1206.     ROM_REGION( 0x60000, REGION_CPU1 )        /* Main CPU Code */
  1207.     ROM_LOAD_EVEN( "astyan2.bin", 0x00000, 0x20000, 0x1b598dcc )
  1208.     ROM_LOAD_ODD(  "astyan1.bin", 0x00000, 0x20000, 0x1a1ad3cf )
  1209.     ROM_LOAD_EVEN( "astyan3.bin", 0x40000, 0x10000, 0x097b53a6 )
  1210.     ROM_LOAD_ODD(  "astyan4.bin", 0x40000, 0x10000, 0x1e1cbdb2 )
  1211.  
  1212.     ASTYANAX_ROM_LOAD
  1213.  
  1214. ROM_END
  1215.  
  1216.  
  1217. ROM_START( lordofk )
  1218.  
  1219.     ROM_REGION( 0x80000, REGION_CPU1 )        /* Main CPU Code */
  1220.     ROM_LOAD_EVEN( "lokj02.bin", 0x00000, 0x20000, 0x0d7f9b4a )
  1221.     ROM_LOAD_ODD(  "lokj01.bin", 0x00000, 0x20000, 0xbed3cb93 )
  1222.     ROM_LOAD_EVEN( "lokj03.bin", 0x40000, 0x20000, 0xd8702c91 )
  1223.     ROM_LOAD_ODD(  "lokj04.bin", 0x40000, 0x20000, 0xeccbf8c9 )
  1224.  
  1225.     ASTYANAX_ROM_LOAD
  1226.  
  1227. ROM_END
  1228.  
  1229.  
  1230. INPUT_PORTS_START( astyanax )
  1231.     COINS                        /* IN0 0x80001.b */
  1232. //    fire    jump    magic
  1233.     JOY_3BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  1234.     RESERVE                        /* IN2 0x80004.b */
  1235.     JOY_3BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  1236.  
  1237.     PORT_START            /* IN4 0x80006.b */
  1238.     PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
  1239.     PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) )
  1240.     PORT_DIPSETTING(    0x04, DEF_STR( 3C_1C ) )
  1241.     PORT_DIPSETTING(    0x02, DEF_STR( 2C_1C ) )
  1242.     PORT_DIPSETTING(    0x07, DEF_STR( 1C_1C ) )
  1243. //    PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )    // 1_2 shown in test mode
  1244. //    PORT_DIPSETTING(    0x05, DEF_STR( 1C_1C ) )    // 1_3
  1245. //    PORT_DIPSETTING(    0x01, DEF_STR( 1C_1C ) )    // 1_4
  1246. //    PORT_DIPSETTING(    0x06, DEF_STR( 1C_1C ) )    // 1_5
  1247.     PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) )
  1248.     PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) )
  1249.     PORT_DIPSETTING(    0x20, DEF_STR( 3C_1C ) )
  1250.     PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )
  1251.     PORT_DIPSETTING(    0x38, DEF_STR( 1C_1C ) )
  1252. //    PORT_DIPSETTING(    0x18, DEF_STR( 1C_1C ) )    // 1_2 shown in test mode
  1253. //    PORT_DIPSETTING(    0x28, DEF_STR( 1C_1C ) )    // 1_3
  1254. //    PORT_DIPSETTING(    0x08, DEF_STR( 1C_1C ) )    // 1_4
  1255. //    PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )    // 1_5
  1256.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
  1257.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  1258.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1259.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )    // according to manual
  1260.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  1261.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1262.  
  1263.     PORT_START            /* IN5 0x80007.b */
  1264.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) // according to manual
  1265.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  1266.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1267.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) // according to manual
  1268.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  1269.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1270.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) )
  1271.     PORT_DIPSETTING(    0x04, "30k 70k 110k then every 30k" )
  1272.     PORT_DIPSETTING(    0x00, "50k 100k then every 40k" )
  1273.     PORT_DIPNAME( 0x18, 0x18, DEF_STR( Lives ) )
  1274.     PORT_DIPSETTING(    0x08, "2" )
  1275.     PORT_DIPSETTING(    0x18, "3" )
  1276.     PORT_DIPSETTING(    0x10, "4" )
  1277.     PORT_DIPSETTING(    0x00, "5" )
  1278.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Difficulty ) )
  1279.     PORT_DIPSETTING(    0x20, "Normal" )
  1280.     PORT_DIPSETTING(    0x00, "Hard" )
  1281.     PORT_DIPNAME( 0x40, 0x40, "Swap 1P/2P Controls" )
  1282.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  1283.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1284.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  1285.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  1286.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1287.  
  1288. INPUT_PORTS_END
  1289.  
  1290.  
  1291. void astyanax_rom_decode(int cpu)
  1292. {
  1293.     unsigned char    *RAM    =    memory_region(REGION_CPU1+cpu);
  1294.     int i,            size    =    memory_region_length(REGION_CPU1+cpu);
  1295.     if (size > 0x40000)    size = 0x40000;
  1296.  
  1297.     for (i = 0 ; i < size ; i+=2)
  1298.     {
  1299.         int x,y;
  1300.  
  1301.         x = READ_WORD(&RAM[i]);
  1302.  
  1303. // [0] def0 a981 65cb 7234
  1304. // [1] fdb9 7531 8ace 0246
  1305. // [2] 4567 0123 ba98 fedc
  1306.  
  1307. #define BITSWAP_0    BITSWAP(x,0xd,0xe,0xf,0x0,0xa,0x9,0x8,0x1,0x6,0x5,0xc,0xb,0x7,0x2,0x3,0x4)
  1308. #define BITSWAP_1    BITSWAP(x,0xf,0xd,0xb,0x9,0x7,0x5,0x3,0x1,0x8,0xa,0xc,0xe,0x0,0x2,0x4,0x6)
  1309. #define BITSWAP_2    BITSWAP(x,0x4,0x5,0x6,0x7,0x0,0x1,0x2,0x3,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc)
  1310.  
  1311.         if        (i < 0x08000)    { if ( (i | 0x248) != i ) {y = BITSWAP_0;} else {y = BITSWAP_1;} }
  1312.         else if    (i < 0x10000)    { y = BITSWAP_2; }
  1313.         else if    (i < 0x18000)    { if ( (i | 0x248) != i ) {y = BITSWAP_0;} else {y = BITSWAP_1;} }
  1314.         else if    (i < 0x20000)    { y = BITSWAP_1; }
  1315.         else                     { y = BITSWAP_2; }
  1316.  
  1317. #undef    BITSWAP_0
  1318. #undef    BITSWAP_1
  1319. #undef    BITSWAP_2
  1320.  
  1321.         WRITE_WORD(&RAM[i],y);
  1322.     }
  1323. }
  1324.  
  1325.  
  1326. static void init_astyanax(void)
  1327. {
  1328.     unsigned char *RAM;
  1329.  
  1330.     astyanax_rom_decode(0);
  1331.  
  1332.     RAM  = memory_region(REGION_CPU1);
  1333.     WRITE_WORD(&RAM[0x0004e6],0x6040);    // protection
  1334. }
  1335.  
  1336.  
  1337. /***************************************************************************
  1338.  
  1339.                     [ Avenging Spirit ] / [ Phantasm ]
  1340.  
  1341. (Avspirit)
  1342. interrupts:    2,3, 5,6,7]        move.w  $e0000.l, $78e9e.l
  1343.                             andi.w  #$ff, $78e9e.l
  1344.             4] 78b20 software watchdog (78ea0 enables it)
  1345.  
  1346.  
  1347. fd6        reads e0000 (values FF,06,34,35,36,37)
  1348. ffa        e0000<-6 test
  1349.  
  1350. 79584.w *** level ***
  1351.  
  1352. phntsm08.bin            spirit13.rom            IDENTICAL
  1353. phntsm10.bin            spirit14.rom            IDENTICAL
  1354. phntsm14.bin            spirit12.rom            IDENTICAL
  1355. phntsm18.bin            spirit11.rom            IDENTICAL
  1356. phntsm19.bin            spirit09.rom            IDENTICAL
  1357. phntsm23.bin            spirit10.rom            IDENTICAL
  1358. phntsm05.bin            spirit01.rom [1st half] IDENTICAL
  1359. phntsm06.bin            spirit02.rom [1st half] IDENTICAL
  1360. phntsm01.bin            spirit05.rom [1st half] 38.631%
  1361. phntsm02.bin            spirit06.rom [1st half] 22.478%
  1362. phntsm03.bin            spirit02.rom [2nd half] 14.528%
  1363. phntsm03.bin            spirit01.rom [2nd half] 14.528%
  1364. phntsm04.bin                                    NO MATCH
  1365.  
  1366. 1] E9C
  1367. 2] ED4
  1368. 3] F4C        rte
  1369. 4-7] ED2    rte
  1370.  
  1371. ***************************************************************************/
  1372.  
  1373. ROM_START( avspirit )
  1374.     ROM_REGION( 0xc0000, REGION_CPU1 )        /* Main CPU Code: 00000-3ffff & 80000-bffff */
  1375.     ROM_LOAD_EVEN( "spirit05.rom",  0x000000, 0x020000, 0xb26a341a )
  1376.     ROM_CONTINUE (                  0x080000 & ~1, 0x020000 | ROMFLAG_ALTERNATE )
  1377.     ROM_LOAD_ODD(  "spirit06.rom",  0x000000, 0x020000, 0x609f71fe )
  1378.     ROM_CONTINUE (                  0x080000 | 1, 0x020000 | ROMFLAG_ALTERNATE )
  1379.  
  1380.     ROM_REGION( 0x40000, REGION_CPU2 )        /* Sound CPU Code */
  1381.     ROM_LOAD_EVEN( "spirit01.rom",  0x000000, 0x020000, 0xd02ec045 )
  1382.     ROM_LOAD_ODD(  "spirit02.rom",  0x000000, 0x020000, 0x30213390 )
  1383.  
  1384.     ROM_REGION( 0x80000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  1385.     ROM_LOAD( "spirit12.rom",  0x000000, 0x080000, 0x728335d4 )
  1386.  
  1387.     ROM_REGION( 0x80000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  1388.     ROM_LOAD( "spirit11.rom",  0x000000, 0x080000, 0x7896f6b0 )
  1389.  
  1390.     ROM_REGION( 0x20000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  1391.     ROM_LOAD( "spirit09.rom",  0x000000, 0x020000, 0x0c37edf7 )
  1392.  
  1393.     ROM_REGION( 0x80000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  1394.     ROM_LOAD( "spirit10.rom",  0x000000, 0x080000, 0x2b1180b3 )
  1395.  
  1396.     ROM_REGION( 0x40000, REGION_SOUND1 )        /* Samples */
  1397.     ROM_LOAD( "spirit14.rom",  0x000000, 0x040000, 0x13be9979 )
  1398.  
  1399.     ROM_REGION( 0x40000, REGION_SOUND2 )        /* Samples */
  1400.     ROM_LOAD( "spirit13.rom",  0x000000, 0x040000, 0x05bc04d9 )
  1401.  
  1402.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  1403.     ROM_LOAD( "ph.bin",        0x0000, 0x0200, 0x8359650a )
  1404. ROM_END
  1405.  
  1406.  
  1407. ROM_START( phantasm )
  1408.     ROM_REGION( 0x60000, REGION_CPU1 )        /* Main CPU Code */
  1409.     ROM_LOAD_EVEN( "phntsm02.bin", 0x000000, 0x020000, 0xd96a3584 )
  1410.     ROM_LOAD_ODD(  "phntsm01.bin", 0x000000, 0x020000, 0xa54b4b87 )
  1411.     ROM_LOAD_EVEN( "phntsm03.bin", 0x040000, 0x010000, 0x1d96ce20 )
  1412.     ROM_LOAD_ODD(  "phntsm04.bin", 0x040000, 0x010000, 0xdc0c4994 )
  1413.  
  1414.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  1415.     ROM_LOAD_EVEN( "phntsm05.bin", 0x000000, 0x010000, 0x3b169b4a )
  1416.     ROM_LOAD_ODD(  "phntsm06.bin", 0x000000, 0x010000, 0xdf2dfb2e )
  1417.  
  1418.     ROM_REGION( 0x80000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  1419. //    ROM_LOAD( "phntsm14.bin",  0x000000, 0x080000, 0x728335d4 )
  1420.     ROM_LOAD( "spirit12.rom",  0x000000, 0x080000, 0x728335d4 )
  1421.  
  1422.     ROM_REGION( 0x80000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  1423. //    ROM_LOAD( "phntsm18.bin",  0x000000, 0x080000, 0x7896f6b0 )
  1424.     ROM_LOAD( "spirit11.rom",  0x000000, 0x080000, 0x7896f6b0 )
  1425.  
  1426.     ROM_REGION( 0x20000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  1427. //    ROM_LOAD( "phntsm19.bin",  0x000000, 0x020000, 0x0c37edf7 )
  1428.     ROM_LOAD( "spirit09.rom",  0x000000, 0x020000, 0x0c37edf7 )
  1429.  
  1430.     ROM_REGION( 0x80000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  1431. //    ROM_LOAD( "phntsm23.bin",  0x000000, 0x080000, 0x2b1180b3 )
  1432.     ROM_LOAD( "spirit10.rom",  0x000000, 0x080000, 0x2b1180b3 )
  1433.  
  1434.     ROM_REGION( 0x40000, REGION_SOUND1 )        /* Samples */
  1435. //    ROM_LOAD( "phntsm10.bin", 0x000000, 0x040000, 0x13be9979 )
  1436.     ROM_LOAD( "spirit14.rom", 0x000000, 0x040000, 0x13be9979 )
  1437.  
  1438.     ROM_REGION( 0x40000, REGION_SOUND2 )        /* Samples */
  1439. //    ROM_LOAD( "phntsm08.bin", 0x000000, 0x040000, 0x05bc04d9 )
  1440.     ROM_LOAD( "spirit13.rom", 0x000000, 0x040000, 0x05bc04d9 )
  1441.  
  1442.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  1443.     ROM_LOAD( "ph.bin",        0x0000, 0x0200, 0x8359650a )
  1444. ROM_END
  1445.  
  1446. //    fire    jump
  1447. #define INPUT_PORTS_AVSPIRIT \
  1448.     COINS \
  1449.     JOY_2BUTTONS(IPF_PLAYER1) \
  1450.     RESERVE \
  1451.     JOY_2BUTTONS(IPF_PLAYER2) \
  1452. \
  1453.     PORT_START \
  1454.     COINAGE_8BITS \
  1455. \
  1456.     PORT_START \
  1457.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) \
  1458.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) ) \
  1459.     PORT_DIPSETTING(    0x00, DEF_STR( On ) ) \
  1460.     PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) \
  1461.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) ) \
  1462.     PORT_DIPSETTING(    0x00, DEF_STR( On ) ) \
  1463.     PORT_DIPNAME( 0x04, 0x04, "Allow Continue" ) \
  1464.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
  1465.     PORT_DIPSETTING(    0x04, DEF_STR( On ) ) \
  1466.     PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) \
  1467.     PORT_DIPSETTING(    0x08, "Easy" ) \
  1468.     PORT_DIPSETTING(    0x18, "Normal" ) \
  1469.     PORT_DIPSETTING(    0x10, "Hard" ) \
  1470.     PORT_DIPSETTING(    0x00, "Hardest" ) \
  1471.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) \
  1472.     PORT_DIPSETTING(    0x20, DEF_STR( Upright ) ) \
  1473.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) ) \
  1474.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) \
  1475.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) ) \
  1476.     PORT_DIPSETTING(    0x00, DEF_STR( On ) ) \
  1477.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  1478.  
  1479.  
  1480. INPUT_PORTS_START( avspirit )
  1481.     INPUT_PORTS_AVSPIRIT
  1482. INPUT_PORTS_END
  1483.  
  1484. INPUT_PORTS_START( phantasm )
  1485.     INPUT_PORTS_AVSPIRIT
  1486. INPUT_PORTS_END
  1487.  
  1488. static void init_avspirit(void)
  1489. {
  1490.     ip_select_values[0] = 0x37;
  1491.     ip_select_values[1] = 0x35;
  1492.     ip_select_values[2] = 0x36;
  1493.     ip_select_values[3] = 0x33;
  1494.     ip_select_values[4] = 0x34;
  1495. }
  1496.  
  1497.  
  1498.  
  1499. void phantasm_rom_decode(int cpu)
  1500. {
  1501.     unsigned char    *RAM    =    memory_region(REGION_CPU1+cpu);
  1502.     int i,            size    =    memory_region_length(REGION_CPU1+cpu);
  1503.     if (size > 0x40000)    size = 0x40000;
  1504.  
  1505.     for (i = 0 ; i < size ; i+=2)
  1506.     {
  1507.         int x,y;
  1508.  
  1509.         x = READ_WORD(&RAM[i]);
  1510.  
  1511. // [0] def0 189a bc56 7234
  1512. // [1] fdb9 7531 eca8 6420
  1513. // [2] 0123 4567 ba98 fedc
  1514. #define BITSWAP_0    BITSWAP(x,0xd,0xe,0xf,0x0,0x1,0x8,0x9,0xa,0xb,0xc,0x5,0x6,0x7,0x2,0x3,0x4)
  1515. #define BITSWAP_1    BITSWAP(x,0xf,0xd,0xb,0x9,0x7,0x5,0x3,0x1,0xe,0xc,0xa,0x8,0x6,0x4,0x2,0x0)
  1516. #define BITSWAP_2    BITSWAP(x,0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc)
  1517.  
  1518.         if        (i < 0x08000)    { if ( (i | 0x248) != i ) {y = BITSWAP_0;} else {y = BITSWAP_1;} }
  1519.         else if    (i < 0x10000)    { y = BITSWAP_2; }
  1520.         else if    (i < 0x18000)    { if ( (i | 0x248) != i ) {y = BITSWAP_0;} else {y = BITSWAP_1;} }
  1521.         else if    (i < 0x20000)    { y = BITSWAP_1; }
  1522.         else                     { y = BITSWAP_2; }
  1523.  
  1524. #undef    BITSWAP_0
  1525. #undef    BITSWAP_1
  1526. #undef    BITSWAP_2
  1527.  
  1528.         WRITE_WORD(&RAM[i],y);
  1529.     }
  1530.  
  1531. }
  1532.  
  1533.  
  1534. static void init_phantasm(void)
  1535. {
  1536.     phantasm_rom_decode(0);
  1537. }
  1538.  
  1539.  
  1540. /***************************************************************************
  1541.  
  1542.                             [ Big Striker ]
  1543.  
  1544. PCB: RB-91105A EB911009-20045
  1545.  
  1546. Note: RAM is ff0000-ffffff while sprites live in 1f8000-1f87ff
  1547.  
  1548. interrupts:    1]
  1549.             2]
  1550.             4]
  1551.  
  1552. $885c/e.w    *** time (BCD) ***
  1553.  
  1554. ***************************************************************************/
  1555.  
  1556. ROM_START( bigstrik )
  1557.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  1558.     ROM_LOAD_EVEN( "91105v11.3", 0x000000, 0x020000, 0x5d6e08ec )
  1559.     ROM_LOAD_ODD(  "91105v11.2", 0x000000, 0x020000, 0x2120f05b )
  1560.  
  1561.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  1562.     ROM_LOAD_EVEN( "91105v10.8", 0x000000, 0x010000, 0x7dd69ece )
  1563.     ROM_LOAD_ODD(  "91105v10.7", 0x000000, 0x010000, 0xbc2c1508 )
  1564.  
  1565.     ROM_REGION( 0x80000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  1566.     ROM_LOAD( "91021.01",   0x000000, 0x080000, 0xf1945858 )
  1567.  
  1568.     ROM_REGION( 0x80000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  1569.     ROM_LOAD( "91021.03",   0x000000, 0x080000, 0xe88821e5 )
  1570.  
  1571.     ROM_REGION( 0x20000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  1572.     ROM_LOAD( "91105v11.9", 0x000000, 0x020000, 0x7be1c50c )
  1573.  
  1574.     ROM_REGION( 0x100000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  1575.     ROM_LOAD( "91021.02",   0x000000, 0x080000, 0x199819ca )
  1576.  
  1577.     ROM_REGION( 0x40000, REGION_SOUND1 )        /* Samples */
  1578.     ROM_LOAD( "91105v10.11", 0x000000, 0x040000, BADCRC(0xa1f13dd5) )    // 1xxxxxxxxxxxxxxxxx = 0xFF
  1579.  
  1580.     ROM_REGION( 0x40000, REGION_SOUND2 )        /* Samples */
  1581.     ROM_LOAD( "91105v10.10", 0x000000, 0x040000, BADCRC(0xe4f8fc8d) )    // 1xxxxxxxxxxxxxxxxx = 0xFF
  1582.  
  1583.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  1584.     ROM_LOAD( "prom",         0x0000, 0x0200, 0x00000000 )
  1585. ROM_END
  1586.  
  1587.  
  1588. INPUT_PORTS_START( bigstrik )
  1589.     COINS
  1590. //    pass    shoot    feint
  1591.     JOY_3BUTTONS(IPF_PLAYER1)
  1592.     RESERVE
  1593.     JOY_3BUTTONS(IPF_PLAYER2)
  1594.  
  1595.     PORT_START            /* IN4 */
  1596.     PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
  1597.     PORT_DIPSETTING(    0x07, DEF_STR( 4C_1C ) )
  1598.     PORT_DIPSETTING(    0x08, DEF_STR( 3C_1C ) )
  1599.     PORT_DIPSETTING(    0x09, DEF_STR( 2C_1C ) )
  1600.     PORT_DIPSETTING(    0x0f, DEF_STR( 1C_1C ) )
  1601.     PORT_DIPSETTING(    0x05, DEF_STR( 2C_3C ) )
  1602. //    PORT_DIPSETTING(    0x04, DEF_STR( 2C_3C ) )
  1603. //    PORT_DIPSETTING(    0x03, DEF_STR( 2C_3C ) )
  1604. //    PORT_DIPSETTING(    0x02, DEF_STR( 2C_3C ) )
  1605. //    PORT_DIPSETTING(    0x01, DEF_STR( 2C_3C ) )
  1606. //    PORT_DIPSETTING(    0x06, DEF_STR( 2C_3C ) )
  1607.     PORT_DIPSETTING(    0x0e, DEF_STR( 1C_2C ) )
  1608.     PORT_DIPSETTING(    0x0d, DEF_STR( 1C_3C ) )
  1609.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_4C ) )
  1610.     PORT_DIPSETTING(    0x0b, DEF_STR( 1C_5C ) )
  1611.     PORT_DIPSETTING(    0x0a, DEF_STR( 1C_6C ) )
  1612.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  1613.     PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
  1614.     PORT_DIPSETTING(    0x70, DEF_STR( 4C_1C ) )
  1615.     PORT_DIPSETTING(    0x80, DEF_STR( 3C_1C ) )
  1616.     PORT_DIPSETTING(    0x90, DEF_STR( 2C_1C ) )
  1617.     PORT_DIPSETTING(    0xf0, DEF_STR( 1C_1C ) )
  1618.     PORT_DIPSETTING(    0x50, DEF_STR( 2C_3C ) )
  1619. //    PORT_DIPSETTING(    0x40, DEF_STR( 2C_3C ) )
  1620. //    PORT_DIPSETTING(    0x30, DEF_STR( 2C_3C ) )
  1621. //    PORT_DIPSETTING(    0x20, DEF_STR( 2C_3C ) )
  1622. //    PORT_DIPSETTING(    0x10, DEF_STR( 2C_3C ) )
  1623. //    PORT_DIPSETTING(    0x60, DEF_STR( 2C_3C ) )
  1624.     PORT_DIPSETTING(    0xe0, DEF_STR( 1C_2C ) )
  1625.     PORT_DIPSETTING(    0xd0, DEF_STR( 1C_3C ) )
  1626.     PORT_DIPSETTING(    0xc0, DEF_STR( 1C_4C ) )
  1627.     PORT_DIPSETTING(    0xb0, DEF_STR( 1C_5C ) )
  1628.     PORT_DIPSETTING(    0xa0, DEF_STR( 1C_6C ) )
  1629.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  1630.  
  1631.     PORT_START            /* IN5 */
  1632.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )
  1633.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  1634.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1635.     PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) )
  1636.     PORT_DIPSETTING(    0x02, "Easy"    )
  1637.     PORT_DIPSETTING(    0x06, "Normal"  )
  1638.     PORT_DIPSETTING(    0x04, "Hard"    )
  1639.     PORT_DIPSETTING(    0x00, "Hardest" )
  1640.     PORT_DIPNAME( 0x18, 0x18, "Time" )
  1641.     PORT_DIPSETTING(    0x00, "Very Short" )
  1642.     PORT_DIPSETTING(    0x10, "Short" )
  1643.     PORT_DIPSETTING(    0x18, "Normal" )
  1644.     PORT_DIPSETTING(    0x08, "Long" )
  1645.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
  1646.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  1647.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  1648.     PORT_DIPNAME( 0x40, 0x40, "1 Credit 2 Play" )
  1649.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  1650.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1651.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  1652.  
  1653. INPUT_PORTS_END
  1654.  
  1655. WRITE_HANDLER( bigstrik_spriteram_w )
  1656. {
  1657.     COMBINE_WORD_MEM(&spriteram[offset],data);
  1658. }
  1659.  
  1660. static void init_bigstrik(void)
  1661. {
  1662.     ip_select_values[0] = 0x58;
  1663.     ip_select_values[1] = 0x54;
  1664.     ip_select_values[2] = 0x55;
  1665.     ip_select_values[3] = 0x56;
  1666.     ip_select_values[4] = 0x57;
  1667.  
  1668.     install_mem_write_handler(0, 0x1f8000, 0x1f87ff, bigstrik_spriteram_w);
  1669. }
  1670.  
  1671.  
  1672. /***************************************************************************
  1673.  
  1674.                             [ Chimera Beast ]
  1675.  
  1676. interrupts:    1,3]
  1677.             2, 5,6]
  1678.             4]
  1679.  
  1680. Note: This game was a prototype
  1681.  
  1682. ***************************************************************************/
  1683.  
  1684. ROM_START( chimerab )
  1685.     ROM_REGION( 0x80000, REGION_CPU1 )        /* Main CPU Code */
  1686.     ROM_LOAD_EVEN( "prg3.bin", 0x000000, 0x040000, 0x70f1448f )
  1687.     ROM_LOAD_ODD(  "prg2.bin", 0x000000, 0x040000, 0x821dbb85 )
  1688.  
  1689.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  1690.     ROM_LOAD_EVEN( "prg8.bin", 0x000000, 0x010000, 0xa682b1ca )
  1691.     ROM_LOAD_ODD(  "prg7.bin", 0x000000, 0x010000, 0x83b9982d )
  1692.  
  1693.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  1694.     ROM_LOAD( "s1.bin",   0x000000, 0x080000, 0xe4c2ac77 )
  1695.  
  1696.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  1697.     ROM_LOAD( "s2.bin",   0x000000, 0x080000, 0xfafb37a5 )
  1698.  
  1699.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  1700.     ROM_LOAD( "scr3.bin", 0x000000, 0x020000, 0x5fe38a83 )
  1701.  
  1702.     ROM_REGION( 0x100000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  1703.     ROM_LOAD( "b2.bin",   0x000000, 0x080000, 0x6e7f1778 )
  1704.     ROM_LOAD( "b1.bin",   0x080000, 0x080000, 0x29c0385e )
  1705.  
  1706.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  1707.     ROM_LOAD( "voi11.bin", 0x000000, 0x040000, 0x14b3afe6 )
  1708.  
  1709.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  1710.     ROM_LOAD( "voi10.bin", 0x000000, 0x040000, 0x67498914 )
  1711.  
  1712.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  1713.     ROM_LOAD( "prom",         0x0000, 0x0200, 0x00000000 )
  1714. ROM_END
  1715.  
  1716. INPUT_PORTS_START( chimerab )
  1717.  
  1718.     COINS
  1719. //    fire    jump    unused?(shown in service mode, but not in instructions)
  1720.     JOY_2BUTTONS(IPF_PLAYER1)
  1721.     RESERVE                // Unused
  1722.     JOY_2BUTTONS(IPF_PLAYER2)
  1723.  
  1724.     PORT_START            /* DSW A */
  1725.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )
  1726.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  1727.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1728.     PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
  1729.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  1730.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1731.     PORT_DIPNAME( 0x04, 0x04, "Allow Continue" )
  1732.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  1733.     PORT_DIPSETTING(    0x04, DEF_STR( On ) )
  1734.     PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) )
  1735.     PORT_DIPSETTING(    0x10, "Easy" )
  1736.     PORT_DIPSETTING(    0x18, "Normal" )
  1737.     PORT_DIPSETTING(    0x08, "Hard" )
  1738.     PORT_DIPSETTING(    0x00, "Hardest" )
  1739.     PORT_DIPNAME( 0x60, 0x20, DEF_STR( Lives ) )
  1740.     PORT_DIPSETTING(    0x40, "1" )
  1741.     PORT_DIPSETTING(    0x60, "2" )
  1742.     PORT_DIPSETTING(    0x20, "3" )
  1743.     PORT_DIPSETTING(    0x00, "4" )
  1744.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  1745.  
  1746.     PORT_START            /* DSW B */
  1747.     COINAGE_8BITS
  1748.  
  1749. INPUT_PORTS_END
  1750.  
  1751. static void init_chimerab(void)
  1752. {
  1753.     /* same as cybattlr */
  1754.     ip_select_values[0] = 0x56;
  1755.     ip_select_values[1] = 0x52;
  1756.     ip_select_values[2] = 0x53;
  1757.     ip_select_values[3] = 0x54;
  1758.     ip_select_values[4] = 0x55;
  1759. }
  1760.  
  1761.  
  1762. /***************************************************************************
  1763.  
  1764.                                 [ Cybattler ]
  1765.  
  1766. interrupts:    1,3]    408
  1767.             2, 5,6]    498
  1768.                     1fd2c2.w routine index:
  1769.                     0:    4be>    1fd2c0.w <- d8000
  1770.                     2:    4ca>    1fd2d0+(1fd2c4.w) <- d8000.    next
  1771.                     4:    4ee>    1fd2c4.w += 2.
  1772.                                             S    P1    P2    DB    DA
  1773.                                 d8000 <-    56    52    53    55    54
  1774.                                 1fd000+     00    02    04    06    08
  1775.                                 depending on 1fd2c4.        previous
  1776.                     6:    4be again
  1777.  
  1778.             4]        452
  1779.  
  1780. c2208 <- 1fd040    (layers enable)
  1781. c2200 <- 1fd042    (sprite control)
  1782. c2308 <- 1fd046    (screen control)
  1783. c2004 <- 1fd054 (scroll 0 ctrl)    c2000 <- 1fd220 (scroll 0 x)    c2002 <- 1fd222 (scroll 1 y)
  1784. c200c <- 1fd05a (scroll 1 ctrl)    c2008 <- 1fd224 (scroll 1 x)    c200a <- 1fd226 (scroll 2 y)
  1785. c2104 <- 1fd060 (scroll 2 ctrl)    c2100 <- 1fd228 (scroll 2 x)    c2102 <- 1fd22a (scroll 3 y)
  1786.  
  1787. 1f0010.w    *** level (0,1,..) ***
  1788. 1fb044.l    *** score / 10 ***
  1789.  
  1790. ***************************************************************************/
  1791.  
  1792. ROM_START( cybattlr )
  1793.     ROM_REGION( 0x80000, REGION_CPU1 )        /* Main CPU Code */
  1794.     ROM_LOAD_EVEN( "cb_03.rom", 0x000000, 0x040000, 0xbee20587 )
  1795.     ROM_LOAD_ODD(  "cb_02.rom", 0x000000, 0x040000, 0x2ed14c50 )
  1796.  
  1797.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  1798.     ROM_LOAD_EVEN( "cb_08.rom", 0x000000, 0x010000, 0xbf7b3558 )
  1799.     ROM_LOAD_ODD(  "cb_07.rom", 0x000000, 0x010000, 0x85d219d7 )
  1800.  
  1801.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  1802.     ROM_LOAD( "cb_m01.rom", 0x000000, 0x080000, 0x1109337f )
  1803.  
  1804.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  1805.     ROM_LOAD( "cb_m04.rom", 0x000000, 0x080000, 0x0c91798e )
  1806.  
  1807.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  1808.     ROM_LOAD( "cb_09.rom",  0x000000, 0x020000, 0x37b1f195 )
  1809.  
  1810.     ROM_REGION( 0x100000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  1811.     ROM_LOAD( "cb_m03.rom", 0x000000, 0x080000, 0x4cd49f58 )
  1812.     ROM_LOAD( "cb_m02.rom", 0x080000, 0x080000, 0x882825db )
  1813.  
  1814.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  1815.     ROM_LOAD( "cb_11.rom", 0x000000, 0x040000, 0x59d62d1f )
  1816.  
  1817.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  1818.     ROM_LOAD( "cb_10.rom", 0x000000, 0x040000, 0x8af95eed )
  1819.  
  1820.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  1821.     ROM_LOAD( "prom",         0x0000, 0x0200, 0x00000000 )
  1822. ROM_END
  1823.  
  1824. INPUT_PORTS_START( cybattlr )
  1825.  
  1826.     COINS
  1827. //    fire    sword
  1828.     JOY_2BUTTONS(IPF_PLAYER1)
  1829.     RESERVE                // Unused
  1830.     JOY_2BUTTONS(IPF_PLAYER2)
  1831.  
  1832.     PORT_START            /* IN - DSW 1 - 1fd2d9.b, !1fd009.b */
  1833.     PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
  1834.     PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) )
  1835.     PORT_DIPSETTING(    0x01, DEF_STR( 3C_1C ) )
  1836.     PORT_DIPSETTING(    0x03, DEF_STR( 2C_1C ) )
  1837.     PORT_DIPSETTING(    0x07, DEF_STR( 1C_1C ) )
  1838.     PORT_DIPSETTING(    0x02, DEF_STR( 2C_3C ) )
  1839.     PORT_DIPSETTING(    0x06, DEF_STR( 1C_2C ) )
  1840.     PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) )
  1841.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_4C ) )
  1842.     PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) )
  1843.     PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) )
  1844.     PORT_DIPSETTING(    0x08, DEF_STR( 3C_1C ) )
  1845.     PORT_DIPSETTING(    0x18, DEF_STR( 2C_1C ) )
  1846.     PORT_DIPSETTING(    0x38, DEF_STR( 1C_1C ) )
  1847.     PORT_DIPSETTING(    0x10, DEF_STR( 2C_3C ) )
  1848.     PORT_DIPSETTING(    0x30, DEF_STR( 1C_2C ) )
  1849.     PORT_DIPSETTING(    0x28, DEF_STR( 1C_3C ) )
  1850.     PORT_DIPSETTING(    0x20, DEF_STR( 1C_4C ) )
  1851.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
  1852.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  1853.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1854.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  1855.  
  1856.     PORT_START            /* IN - DSW 2 - 1fd2d7.b, !1fd007.b */
  1857.     PORT_DIPNAME( 0x01, 0x01, "Unknown 2-0" )
  1858.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  1859.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1860.     PORT_DIPNAME( 0x02, 0x02, "Unknown 2-1" )
  1861.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  1862.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1863.     PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" )    // 1 bit
  1864.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  1865.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1866.     PORT_DIPNAME( 0x08, 0x08, "Allow Continue" )
  1867.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  1868.     PORT_DIPSETTING(    0x08, DEF_STR( On ) )
  1869.     PORT_DIPNAME( 0x10, 0x10, "Unknown 2-4" )
  1870.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  1871.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1872.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
  1873.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  1874.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  1875.     PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" )    // 1 bit
  1876.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  1877.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1878.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  1879.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  1880.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1881.  
  1882. INPUT_PORTS_END
  1883.  
  1884.  
  1885.  
  1886.  
  1887. static void init_cybattlr(void)
  1888. {
  1889.     ip_select_values[0] = 0x56;
  1890.     ip_select_values[1] = 0x52;
  1891.     ip_select_values[2] = 0x53;
  1892.     ip_select_values[3] = 0x54;
  1893.     ip_select_values[4] = 0x55;
  1894. }
  1895.  
  1896.  
  1897.  
  1898. /***************************************************************************
  1899.  
  1900.                          [ Earth Defense Force ]
  1901.  
  1902. interrupts:    2,3]    543C>    move.w  $e0000.l,    $60da6.l
  1903.                             move.w  #$ffff,        $60da8.l
  1904.             4,5,6]    5928 +    move.w    #$ffff,        $60010.l
  1905.  
  1906. 89e            (a7)+ -> 44000.w & 6000e.w
  1907. 8cc            (a7)+ -> 44204.w ; 4420c.w ; 4400c.w
  1908. fc0            (a7)+ -> 58000 (string)
  1909.  
  1910. 616f4.w        *** lives ***
  1911. 60d8a.w        *** level(1..) ***
  1912.  
  1913. ***************************************************************************/
  1914.  
  1915. ROM_START( edf )
  1916.     ROM_REGION( 0xc0000, REGION_CPU1 )        /* Main CPU Code: 00000-3ffff & 80000-bffff */
  1917.     ROM_LOAD_EVEN( "edf_05.rom",  0x000000, 0x020000, 0x105094d1 )
  1918.     ROM_CONTINUE (                0x080000 & ~1, 0x020000 | ROMFLAG_ALTERNATE )
  1919.     ROM_LOAD_ODD(  "edf_06.rom",  0x000000, 0x020000, 0x94da2f0c )
  1920.     ROM_CONTINUE (                0x080000 | 1, 0x020000 | ROMFLAG_ALTERNATE )
  1921.  
  1922.     ROM_REGION( 0x40000, REGION_CPU2 )        /* Sound CPU Code */
  1923.     ROM_LOAD_EVEN( "edf_01.rom",  0x000000, 0x020000, 0x2290ea19 )
  1924.     ROM_LOAD_ODD(  "edf_02.rom",  0x000000, 0x020000, 0xce93643e )
  1925.  
  1926.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  1927.     ROM_LOAD( "edf_m04.rom",  0x000000, 0x080000, 0x6744f406 )
  1928.  
  1929.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  1930.     ROM_LOAD( "edf_m05.rom",  0x000000, 0x080000, 0x6f47e456 )
  1931.  
  1932.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  1933.     ROM_LOAD( "edf_09.rom",   0x000000, 0x020000, 0x96e38983 )
  1934.  
  1935.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  1936.     ROM_LOAD( "edf_m03.rom",  0x000000, 0x080000, 0xef469449 )
  1937.  
  1938.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  1939.     ROM_LOAD( "edf_m02.rom",  0x000000, 0x040000, 0xfc4281d2 )
  1940.  
  1941.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  1942.     ROM_LOAD( "edf_m01.rom",  0x000000, 0x040000, 0x9149286b )
  1943.  
  1944.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  1945.     ROM_LOAD( "prom",         0x0000, 0x0200, 0x00000000 )
  1946. ROM_END
  1947.  
  1948. INPUT_PORTS_START( edf )
  1949.     COINS
  1950. //    fire    unfold_weapons
  1951.     JOY_2BUTTONS(IPF_PLAYER1)
  1952.     RESERVE
  1953.     JOY_2BUTTONS(IPF_PLAYER2)
  1954.  
  1955.     PORT_START            /* IN4 */
  1956.     COINAGE_6BITS
  1957.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
  1958.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  1959.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  1960.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  1961.  
  1962.     PORT_START            /* IN5 0x66007.b */
  1963.     PORT_DIPNAME( 0x07, 0x07, "DSW-B bits 2-0" )
  1964.     PORT_DIPSETTING(    0x00, "0" )
  1965.     PORT_DIPSETTING(    0x01, "1" )
  1966.     PORT_DIPSETTING(    0x02, "2" )
  1967.     PORT_DIPSETTING(    0x03, "3" )
  1968.     PORT_DIPSETTING(    0x04, "4" )
  1969.     PORT_DIPSETTING(    0x05, "5" )
  1970.     PORT_DIPSETTING(    0x06, "6" )
  1971.     PORT_DIPSETTING(    0x07, "7" )
  1972.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Lives ) )
  1973.     PORT_DIPSETTING(    0x08, "3" )
  1974.     PORT_DIPSETTING(    0x00, "4" )
  1975.     PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
  1976.     PORT_DIPSETTING(    0x00, "0" )
  1977.     PORT_DIPSETTING(    0x30, "1" )
  1978.     PORT_DIPSETTING(    0x10, "2" )
  1979.     PORT_DIPSETTING(    0x20, "3" )
  1980.     PORT_DIPNAME( 0x40, 0x40, "DSW-B bit 6" )
  1981.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  1982.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1983.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  1984.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  1985.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  1986.  
  1987. INPUT_PORTS_END
  1988.  
  1989. static void init_edf(void)
  1990. {
  1991.     ip_select_values[0] = 0x20;
  1992.     ip_select_values[1] = 0x21;
  1993.     ip_select_values[2] = 0x22;
  1994.     ip_select_values[3] = 0x23;
  1995.     ip_select_values[4] = 0x24;
  1996. }
  1997.  
  1998.  
  1999.  
  2000. /***************************************************************************
  2001.  
  2002.                                 [ Hachoo! ]
  2003.  
  2004. ***************************************************************************/
  2005.  
  2006.  
  2007. #define HACHOO_ROM_LOAD \
  2008. \
  2009.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */ \
  2010.     ROM_LOAD_EVEN( "hacho05.rom", 0x000000, 0x010000, 0x6271f74f ) \
  2011.     ROM_LOAD_ODD(  "hacho06.rom", 0x000000, 0x010000, 0xdb9e743c ) \
  2012. \
  2013.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */ \
  2014.     ROM_LOAD( "hacho14.rom", 0x000000, 0x080000, 0x10188483 ) \
  2015. \
  2016.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */ \
  2017.     ROM_LOAD( "hacho15.rom", 0x000000, 0x020000, 0xe559347e ) \
  2018.     ROM_LOAD( "hacho16.rom", 0x020000, 0x020000, 0x105fd8b5 ) \
  2019.     ROM_LOAD( "hacho17.rom", 0x040000, 0x020000, 0x77f46174 ) \
  2020.     ROM_LOAD( "hacho18.rom", 0x060000, 0x020000, 0x0be21111 ) \
  2021. \
  2022.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */ \
  2023.     ROM_LOAD( "hacho19.rom", 0x000000, 0x020000, 0x33bc9de3 ) \
  2024. \
  2025.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */ \
  2026.     ROM_LOAD( "hacho20.rom", 0x000000, 0x020000, 0x2ae2011e ) \
  2027.     ROM_LOAD( "hacho21.rom", 0x020000, 0x020000, 0x6dcfb8d5 ) \
  2028.     ROM_LOAD( "hacho22.rom", 0x040000, 0x020000, 0xccabf0e0 ) \
  2029.     ROM_LOAD( "hacho23.rom", 0x060000, 0x020000, 0xff5f77aa ) \
  2030. \
  2031.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */ \
  2032.     ROM_LOAD( "hacho09.rom", 0x000000, 0x020000, 0xe9f35c90 ) \
  2033.     ROM_LOAD( "hacho10.rom", 0x020000, 0x020000, 0x1aeaa188 ) \
  2034. \
  2035.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */ \
  2036.     ROM_LOAD( "hacho07.rom", 0x000000, 0x020000, 0x06e6ca7f ) \
  2037.     ROM_LOAD( "hacho08.rom", 0x020000, 0x020000, 0x888a6df1 ) \
  2038. \
  2039.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */ \
  2040.     ROM_LOAD( "prom",         0x0000, 0x0200, 0x00000000 )
  2041.  
  2042.  
  2043. ROM_START( hachoo )
  2044.  
  2045.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  2046.     ROM_LOAD_EVEN( "hacho02.rom", 0x000000, 0x020000, 0x49489c27 )
  2047.     ROM_LOAD_ODD(  "hacho01.rom", 0x000000, 0x020000, 0x97fc9515 )
  2048.  
  2049.     HACHOO_ROM_LOAD
  2050.  
  2051. ROM_END
  2052.  
  2053.  
  2054. INPUT_PORTS_START( hachoo )
  2055.     COINS                        /* IN0 0x80001.b */
  2056. //    fire    jump
  2057.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  2058.     RESERVE                        /* IN2 0x80004.b */
  2059.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  2060.  
  2061.     PORT_START            /* IN4 0x80006.b */
  2062.     COINAGE_6BITS
  2063.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
  2064.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  2065.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  2066.     PORT_DIPNAME( 0x80, 0x80, "Unknown 1-0" )    // unused?
  2067.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2068.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2069.  
  2070.     PORT_START            /* IN5 0x80007.b */
  2071.     PORT_DIPNAME( 0x01, 0x01, "Unknown 2-0" )    // unused?
  2072.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  2073.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2074.     PORT_DIPNAME( 0x02, 0x02, "Unknown 2-1" )    // unused?
  2075.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  2076.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2077.     PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" )    // unused?
  2078.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  2079.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2080.     PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" )    // unused?
  2081.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  2082.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2083.     PORT_DIPNAME( 0x30, 0x30, "?Difficulty?" )    // 4 & 5
  2084.     PORT_DIPSETTING(    0x30, "3" )
  2085.     PORT_DIPSETTING(    0x20, "2" )
  2086.     PORT_DIPSETTING(    0x10, "1" )
  2087.     PORT_DIPSETTING(    0x00, "0" )
  2088.     PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" )    // unused?
  2089.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  2090.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2091.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  2092.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2093.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2094.  
  2095. INPUT_PORTS_END
  2096.  
  2097. static void init_hachoo(void)
  2098. {
  2099.     unsigned char *RAM;
  2100.  
  2101.     astyanax_rom_decode(0);
  2102.  
  2103.     RAM  = memory_region(REGION_CPU1);
  2104.     WRITE_WORD(&RAM[0x0006da],0x6000);    // protection
  2105. }
  2106.  
  2107.  
  2108.  
  2109. /* There's another revision, but it's a bad dump (top half of the code is FF) */
  2110. /* There's the priority PROM 82s131.14m in there, all FFs though :( */
  2111. #if 0
  2112. ROM_START( hachoo1 )
  2113.  
  2114.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  2115.         ROM_LOAD_EVEN( "hacho02.rom", 0x000000, 0x020000, 0x49489c27 )
  2116.         ROM_LOAD_ODD(  "hacho01.rom", 0x000000, 0x020000, 0x97fc9515 )
  2117.         ROM_LOAD_EVEN( "rom-2", 0x000000, 0x010000, 0x3f56efb8 )
  2118.         ROM_LOAD_ODD(  "rom-1", 0x000000, 0x010000, 0xc44bd605 )
  2119.  
  2120.     HACHOO_ROM_LOAD
  2121.  
  2122. ROM_END
  2123.  
  2124. #endif
  2125.  
  2126.  
  2127. /***************************************************************************
  2128.  
  2129.                             [ Iga Ninjyutsuden ]
  2130.  
  2131. interrupts:    1] 420(does nothing)
  2132.             2] 500
  2133.             3] 410(it doesn't save registers on the stack!!)
  2134.  
  2135. f0004.l        *** hi score (BCD) ***
  2136. f000c.l        *** score (BCD) ***
  2137. f002a.w        *** lives ***
  2138. f010c.w        credits
  2139.  
  2140. ***************************************************************************/
  2141.  
  2142.  
  2143. ROM_START( iganinju )
  2144.     ROM_REGION( 0x60000, REGION_CPU1 )        /* Main CPU Code */
  2145.     ROM_LOAD_EVEN( "iga_02.bin", 0x000000, 0x020000, 0xbd00c280 )
  2146.     ROM_LOAD_ODD(  "iga_01.bin", 0x000000, 0x020000, 0xfa416a9e )
  2147.     ROM_LOAD_EVEN( "iga_03.bin", 0x040000, 0x010000, 0xde5937ad )
  2148.     ROM_LOAD_ODD(  "iga_04.bin", 0x040000, 0x010000, 0xafaf0480 )
  2149.  
  2150.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  2151.     ROM_LOAD_EVEN( "iga_05.bin", 0x000000, 0x010000, 0x13580868 )
  2152.     ROM_LOAD_ODD(  "iga_06.bin", 0x000000, 0x010000, 0x7904d5dd )
  2153.  
  2154.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2155.     ROM_LOAD( "iga_14.bin", 0x000000, 0x040000, 0xc707d513 )
  2156.  
  2157.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2158.     ROM_LOAD( "iga_18.bin", 0x000000, 0x080000, 0x6c727519 )
  2159.  
  2160.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  2161.     ROM_LOAD( "iga_19.bin", 0x000000, 0x020000, 0x98a7e998 )
  2162.  
  2163.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  2164.     ROM_LOAD( "iga_23.bin", 0x000000, 0x080000, 0xfb58c5f4 )
  2165.  
  2166.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  2167.     ROM_LOAD( "iga_10.bin", 0x000000, 0x040000, 0x67a89e0d )
  2168.  
  2169.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  2170.     ROM_LOAD( "iga_08.bin", 0x000000, 0x040000, 0x857dbf60 )
  2171.  
  2172.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  2173.     ROM_LOAD( "prom",         0x0000, 0x0200, 0x00000000 )
  2174. ROM_END
  2175.  
  2176.  
  2177. INPUT_PORTS_START( iganinju )
  2178.  
  2179.     COINS                        /* IN0 0x80001.b */
  2180. //    fire    jump
  2181.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  2182.     RESERVE                        /* IN2 0x80004.b */
  2183.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  2184.  
  2185.     PORT_START             /* IN4 0x80006.b */
  2186.     COINAGE_6BITS
  2187.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
  2188.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  2189.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2190.     PORT_BITX(    0x80, 0x80, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Freeze Screen", IP_KEY_NONE, IP_JOY_NONE )
  2191.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2192.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2193.  
  2194.     PORT_START            /* IN5 - 0x80007.b */
  2195.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
  2196.     PORT_DIPSETTING(    0x03, "2" )
  2197.     PORT_DIPSETTING(    0x01, "3" )
  2198.     PORT_DIPSETTING(    0x02, "4" )
  2199.     PORT_BITX( 0,       0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Inifinite", IP_KEY_NONE, IP_JOY_NONE )
  2200.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) )
  2201.     PORT_DIPSETTING(    0x04, "50k" )
  2202.     PORT_DIPSETTING(    0x00, "200k" )
  2203.     PORT_DIPNAME( 0x08, 0x08, "Allow Continue" )
  2204.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  2205.     PORT_DIPSETTING(    0x08, DEF_STR( On ) )
  2206.     PORT_DIPNAME( 0x30, 0x30, "?Difficulty?" )
  2207.     PORT_DIPSETTING(    0x30, "3" )
  2208.     PORT_DIPSETTING(    0x20, "2" )
  2209.     PORT_DIPSETTING(    0x10, "1" )
  2210.     PORT_DIPSETTING(    0x00, "0" )
  2211.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
  2212.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  2213.     PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
  2214.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  2215.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2216.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2217.  
  2218. INPUT_PORTS_END
  2219.  
  2220. static void init_iganinju(void)
  2221. {
  2222.     unsigned char *RAM;
  2223.  
  2224.     phantasm_rom_decode(0);
  2225.  
  2226.     RAM  = memory_region(REGION_CPU1);
  2227.     WRITE_WORD(&RAM[0x02f000],0x835d);    // protection
  2228.  
  2229.     WRITE_WORD(&RAM[0x00006e],0x0420);    // the only game that does
  2230.                                         // not like lev 3 interrupts
  2231. }
  2232.  
  2233.  
  2234.  
  2235. /***************************************************************************
  2236.  
  2237.                             [ Kick Off ]
  2238.  
  2239. WARNING: The sound CPU writes and read in the 9000-ffff area
  2240.  
  2241. interrupts:    1-2]    rte
  2242.             3]        timer
  2243.             4-7]    loop forever
  2244.  
  2245. f0128/a.w    *** Time (minutes/seconds BCD) ***
  2246. f012c/e.w    *** Goals (P1/P2) ***
  2247.  
  2248. Notes:
  2249.     * Coin B and Test are ignored
  2250.     * The alternate control method (selectable through a DSW)
  2251.       isn't implemented: the program tests the low 4 bits of
  2252.       the joystick inputs ($80002, $80004) but not the buttons.
  2253.       I can't get the players to move
  2254.     * Pressing P1 or P2 Start while the game boots pops up
  2255.       a rudimental sprites or tiles browser
  2256.  
  2257. ***************************************************************************/
  2258.  
  2259. ROM_START( kickoff )
  2260.     ROM_REGION( 0x20000, REGION_CPU1 )        /* Main CPU Code */
  2261.     ROM_LOAD_EVEN( "kioff03.rom", 0x000000, 0x010000, 0x3b01be65 )
  2262.     ROM_LOAD_ODD(  "kioff01.rom", 0x000000, 0x010000, 0xae6e68a1 )
  2263.  
  2264.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  2265.     ROM_LOAD_EVEN( "kioff09.rom", 0x000000, 0x010000, 0x1770e980 )
  2266.     ROM_LOAD_ODD(  "kioff19.rom", 0x000000, 0x010000, 0x1b03bbe4 )
  2267.  
  2268.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2269.     ROM_LOAD( "kioff05.rom", 0x000000, 0x020000, 0xe7232103 )
  2270.     ROM_LOAD( "kioff06.rom", 0x020000, 0x020000, 0xa0b3cb75 )
  2271.     ROM_LOAD( "kioff07.rom", 0x040000, 0x020000, 0xed649919 )
  2272.     ROM_LOAD( "kioff10.rom", 0x060000, 0x020000, 0xfd739fec )
  2273.  
  2274.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2275.     // scroll 1 is unused
  2276.  
  2277.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  2278.     ROM_LOAD( "kioff16.rom", 0x000000, 0x020000, 0x22c46314 )
  2279.  
  2280.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  2281.     ROM_LOAD( "kioff27.rom", 0x000000, 0x020000, 0xca221ae2 )
  2282.     ROM_LOAD( "kioff18.rom", 0x020000, 0x020000, 0xd7909ada )
  2283.     ROM_LOAD( "kioff17.rom", 0x040000, 0x020000, 0xf171559e )
  2284.     ROM_LOAD( "kioff26.rom", 0x060000, 0x020000, 0x2a90df1b )
  2285.  
  2286.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  2287.     ROM_LOAD( "kioff20.rom", 0x000000, 0x020000, 0x5c28bd2d )
  2288.     ROM_LOAD( "kioff21.rom", 0x020000, 0x020000, 0x195940cf )
  2289.  
  2290.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  2291.     // same rom for 2 oki chips ?? Unlikely
  2292.     ROM_LOAD( "kioff20.rom", 0x000000, 0x020000, 0x5c28bd2d )
  2293.     ROM_LOAD( "kioff21.rom", 0x020000, 0x020000, 0x195940cf )
  2294.  
  2295.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  2296.     ROM_LOAD( "prom",    0x0000, 0x0200, 0x00000000 )
  2297. ROM_END
  2298.  
  2299. INPUT_PORTS_START( kickoff )
  2300.     COINS                        /* IN0 0x80001.b ->  !f0008/a.w  */
  2301. //    shoot    pass
  2302.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b ->  !f000c/e.w  */
  2303.     RESERVE                        /* IN2 0x80004.b --> !f0010/11.w */
  2304.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b /               */
  2305.  
  2306.     PORT_START            /* IN4 0x80006.b */
  2307.     PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
  2308.     PORT_DIPSETTING(    0x01, DEF_STR( 4C_1C ) )
  2309.     PORT_DIPSETTING(    0x02, DEF_STR( 3C_1C ) )
  2310.     PORT_DIPSETTING(    0x03, DEF_STR( 2C_1C ) )
  2311.     PORT_DIPSETTING(    0x07, DEF_STR( 1C_1C ) )
  2312.     PORT_DIPSETTING(    0x06, DEF_STR( 1C_2C ) )
  2313.     PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) )
  2314.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_4C ) )
  2315.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  2316.     PORT_DIPNAME( 0x08, 0x08, "Unknown 1-3" )    // unused?
  2317.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  2318.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2319.     PORT_DIPNAME( 0x10, 0x10, "Unknown 1-4" )    // unused?
  2320.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  2321.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2322.     PORT_BITX(    0x20, 0x20, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Freeze Screen", IP_KEY_NONE, IP_JOY_NONE )
  2323.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  2324.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2325.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
  2326.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  2327.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2328.     PORT_DIPNAME( 0x80, 0x80, "Text" )
  2329.     PORT_DIPSETTING(    0x80, "Japanese" )
  2330.     PORT_DIPSETTING(    0x00, "English" )    // show "Japan Only" warning
  2331.  
  2332.     PORT_START            /* IN5 0x80007.b */
  2333.     PORT_DIPNAME( 0x03, 0x03, "Time" )    // -> !f0082.w
  2334.     PORT_DIPSETTING(    0x03, "3'" )
  2335.     PORT_DIPSETTING(    0x02, "4'" )
  2336.     PORT_DIPSETTING(    0x01, "5'" )
  2337.     PORT_DIPSETTING(    0x00, "6'" )
  2338.     PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" )    // unused?
  2339.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  2340.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2341.     PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" )    // unused?
  2342.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  2343.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2344.     PORT_DIPNAME( 0x30, 0x30, "?Difficulty?" )    // -> !f0084.w
  2345.     PORT_DIPSETTING(    0x30, "0" )
  2346.     PORT_DIPSETTING(    0x20, "1" )
  2347.     PORT_DIPSETTING(    0x10, "2" )
  2348.     PORT_DIPSETTING(    0x00, "3" )
  2349.     PORT_DIPNAME( 0x40, 0x00, "Controls" )
  2350.     PORT_DIPSETTING(    0x40, DEF_STR( Unknown ) )
  2351.     PORT_DIPSETTING(    0x00, "Joystick" )
  2352.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  2353.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2354.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2355.  
  2356. INPUT_PORTS_END
  2357.  
  2358.  
  2359. /***************************************************************************
  2360.  
  2361.                             [ Legend of Makai ]
  2362.  
  2363. ***************************************************************************/
  2364.  
  2365. ROM_START( lomakai )
  2366.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  2367.     ROM_LOAD_EVEN( "lom_30.rom", 0x000000, 0x020000, 0xba6d65b8 )
  2368.     ROM_LOAD_ODD(  "lom_20.rom", 0x000000, 0x020000, 0x56a00dc2 )
  2369.  
  2370.     ROM_REGION( 0x10000, REGION_CPU2 )        /* Sound CPU Code (Z80) */
  2371.     ROM_LOAD( "lom_01.rom",  0x0000, 0x10000, 0x46e85e90 )
  2372.  
  2373.     ROM_REGION( 0x020000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2374.     ROM_LOAD( "lom_05.rom", 0x000000, 0x020000, 0xd04fc713 )
  2375.  
  2376.     ROM_REGION( 0x010000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2377.     ROM_LOAD( "lom_08.rom", 0x000000, 0x010000, 0xbdb15e67 )
  2378.  
  2379.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Sprites */
  2380.     ROM_LOAD( "lom_06.rom", 0x000000, 0x020000, 0xf33b6eed )
  2381.  
  2382.     ROM_REGION( 0x0200, REGION_PROMS )        /* Unknown PROMs */
  2383.     ROM_LOAD( "makaiden.9",  0x0000, 0x0100, 0x3567065d )
  2384.     ROM_LOAD( "makaiden.10", 0x0100, 0x0100, 0xe6709c51 )
  2385. ROM_END
  2386.  
  2387. ROM_START( makaiden )
  2388.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  2389.     ROM_LOAD_EVEN( "makaiden.3a", 0x000000, 0x020000, 0x87cf81d1 )
  2390.     ROM_LOAD_ODD(  "makaiden.2a", 0x000000, 0x020000, 0xd40e0fea )
  2391.  
  2392.     ROM_REGION( 0x10000, REGION_CPU2 )        /* Sound CPU Code (Z80) */
  2393.     ROM_LOAD( "lom_01.rom",  0x0000, 0x10000, 0x46e85e90 )
  2394.  
  2395.     ROM_REGION( 0x020000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2396.     ROM_LOAD( "lom_05.rom", 0x000000, 0x020000, 0xd04fc713 )
  2397.  
  2398.     ROM_REGION( 0x010000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2399.     ROM_LOAD( "makaiden.8", 0x000000, 0x010000, 0xa7f623f9 )
  2400.  
  2401.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Sprites */
  2402.     ROM_LOAD( "lom_06.rom", 0x000000, 0x020000, 0xf33b6eed )
  2403.  
  2404.     ROM_REGION( 0x0200, REGION_PROMS )        /* Unknown PROMs */
  2405.     ROM_LOAD( "makaiden.9",  0x0000, 0x0100, 0x3567065d )
  2406.     ROM_LOAD( "makaiden.10", 0x0100, 0x0100, 0xe6709c51 )
  2407. ROM_END
  2408.  
  2409. INPUT_PORTS_START( lomakai )
  2410.     COINS                        /* IN0 0x80001.b */
  2411. //    fire    jump
  2412.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  2413.     RESERVE                        /* IN2 0x80004.b */
  2414.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  2415.  
  2416.     PORT_START            /* IN4 0x80006.b */
  2417.     COINAGE_6BITS_2
  2418.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
  2419.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  2420.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2421.     PORT_BITX(    0x80, 0x80, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
  2422.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2423.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2424.  
  2425.     PORT_START            /* IN5 0x80007.b */
  2426.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
  2427.     PORT_DIPSETTING(    0x00, "2" )
  2428.     PORT_DIPSETTING(    0x03, "3" )
  2429.     PORT_DIPSETTING(    0x02, "4" )
  2430.     PORT_DIPSETTING(    0x01, "5" )
  2431.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  2432.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  2433.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2434.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  2435.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  2436.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2437.     PORT_DIPNAME( 0x30, 0x30, "?Difficulty?" )
  2438.     PORT_DIPSETTING(    0x00, "Easy" )
  2439.     PORT_DIPSETTING(    0x30, "Normal" )
  2440.     PORT_DIPSETTING(    0x20, "Hard" )
  2441.     PORT_DIPSETTING(    0x10, "Hardest" )
  2442.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
  2443.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  2444.     PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
  2445.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  2446.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2447.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2448.  
  2449. INPUT_PORTS_END
  2450.  
  2451.  
  2452. /***************************************************************************
  2453.  
  2454.                              [ P - 47 ]
  2455.  
  2456. (Japan version)
  2457. interrupts:    1]    53e        2] 540
  2458.  
  2459. 517a        print word string: (a6)+,(a5)+$40. FFFF ends
  2460. 5dbc        print string(s) to (a1)+$40: a6-> len.b,x.b,y.b,(chars.b)*
  2461. 726a        prints screen
  2462. 7300        ram test
  2463. 7558        ip test
  2464. 75e6(7638 loop)    sound test
  2465.     84300.w        <-f1002.w    ?portrait F/F on(0x0100)/off(0x0000)
  2466.     84308.w        <-f1004.w    sound code
  2467.  
  2468. 7736(7eb4 loop)    scroll 0 test
  2469.     9809c        color
  2470.     980a0        hscroll
  2471.     980a4        vscroll
  2472.     980a8        charsize
  2473.  
  2474.     7e1e        prepare screen
  2475.     7e84        get user input
  2476.     7faa        vhscroll
  2477.     80ce        print value.l from a0
  2478.  
  2479. 785c(78b8 loop)    obj check 1        84000.w    <-0x0E    84100.w    <-0x101
  2480.     9804c    size
  2481.     98050    number        (0e.w bit 11-0)
  2482.     98054    color code    (08.w bit 2-0)
  2483.     98058    H flip        (08.w bit 6)
  2484.     9805c    V flip        (08.w bit 7)
  2485.     98060    priority    (08.w bit 3)
  2486.     98064    mosaic        (08.w bit 11-8)
  2487.     98068    mosaic sol.    (08.w bit 12)
  2488.  
  2489. 7afe(7cfe loop)    obj check 2        84000.w    <-0x0f    84100.w    <-0x00
  2490.     9804a    obj num    (a4-8e000)/8
  2491.     9804e    H-rev    a4+02.w
  2492.     98052    V-rev    a4+04.w
  2493.     98056    CG-rev    a4+06.w
  2494.     9805a    Rem.Eff bit   4 of 84100
  2495.     98060    Rem.Num bit 3-0 of 84100 (see 7dd4)
  2496.  
  2497. TRAP#2        pause?
  2498. f0104.w        *** initial lives ***
  2499. f002a/116.w    <-!80000
  2500. f0810.w        <-!80002
  2501. f0c00.w        <-!80004
  2502. f0018.w        *** level ***
  2503.  
  2504.  
  2505. ***************************************************************************/
  2506.  
  2507. ROM_START( p47 )
  2508.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  2509.     ROM_LOAD_EVEN( "p47us3.bin", 0x000000, 0x020000, 0x022e58b8 )
  2510.     ROM_LOAD_ODD(  "p47us1.bin", 0x000000, 0x020000, 0xed926bd8 )
  2511.  
  2512.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  2513.     ROM_LOAD_EVEN( "p47j_9.bin",  0x000000, 0x010000, 0xffcf318e )
  2514.     ROM_LOAD_ODD(  "p47j_19.bin", 0x000000, 0x010000, 0xadb8c12e )
  2515.  
  2516.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2517.     ROM_LOAD( "p47j_5.bin",  0x000000, 0x020000, 0xfe65b65c )
  2518.     ROM_LOAD( "p47j_6.bin",  0x020000, 0x020000, 0xe191d2d2 )
  2519.     ROM_LOAD( "p47j_7.bin",  0x040000, 0x020000, 0xf77723b7 )
  2520.  
  2521.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2522.     ROM_LOAD( "p47j_23.bin", 0x000000, 0x020000, 0x6e9bc864 )
  2523.     ROM_RELOAD(              0x020000, 0x020000 )    /* why? */
  2524.     ROM_LOAD( "p47j_12.bin", 0x040000, 0x020000, 0x5268395f )
  2525.  
  2526.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  2527.     ROM_LOAD( "p47us16.bin", 0x000000, 0x010000, 0x5a682c8f )
  2528.  
  2529.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  2530.     ROM_LOAD( "p47j_27.bin", 0x000000, 0x020000, 0x9e2bde8e )
  2531.     ROM_LOAD( "p47j_18.bin", 0x020000, 0x020000, 0x29d8f676 )
  2532.     ROM_LOAD( "p47j_26.bin", 0x040000, 0x020000, 0x4d07581a )
  2533.     ROM_RELOAD(              0x060000, 0x020000 )    /* why? */
  2534.  
  2535.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  2536.     ROM_LOAD( "p47j_20.bin", 0x000000, 0x020000, 0x2ed53624 )
  2537.     ROM_LOAD( "p47j_21.bin", 0x020000, 0x020000, 0x6f56b56d )
  2538.  
  2539.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  2540.     ROM_LOAD( "p47j_10.bin", 0x000000, 0x020000, 0xb9d79c1e )
  2541.     ROM_LOAD( "p47j_11.bin", 0x020000, 0x020000, 0xfa0d1887 )
  2542.  
  2543.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  2544.     ROM_LOAD( "prom.14m",    0x0000, 0x0200, 0x1d877538 )
  2545. ROM_END
  2546.  
  2547.  
  2548. ROM_START( p47j )
  2549.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  2550.     ROM_LOAD_EVEN( "p47j_3.bin", 0x000000, 0x020000, 0x11c655e5 )
  2551.     ROM_LOAD_ODD(  "p47j_1.bin", 0x000000, 0x020000, 0x0a5998de )
  2552.  
  2553.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  2554.     ROM_LOAD_EVEN( "p47j_9.bin",  0x000000, 0x010000, 0xffcf318e )
  2555.     ROM_LOAD_ODD(  "p47j_19.bin", 0x000000, 0x010000, 0xadb8c12e )
  2556.  
  2557.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2558.     ROM_LOAD( "p47j_5.bin",  0x000000, 0x020000, 0xfe65b65c )
  2559.     ROM_LOAD( "p47j_6.bin",  0x020000, 0x020000, 0xe191d2d2 )
  2560.     ROM_LOAD( "p47j_7.bin",  0x040000, 0x020000, 0xf77723b7 )
  2561.  
  2562.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2563.     ROM_LOAD( "p47j_23.bin", 0x000000, 0x020000, 0x6e9bc864 )
  2564.     ROM_RELOAD(              0x020000, 0x020000 )    /* why? */
  2565.     ROM_LOAD( "p47j_12.bin", 0x040000, 0x020000, 0x5268395f )
  2566.  
  2567.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  2568.     ROM_LOAD( "p47j_16.bin", 0x000000, 0x010000, 0x30e44375 )
  2569.  
  2570.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  2571.     ROM_LOAD( "p47j_27.bin", 0x000000, 0x020000, 0x9e2bde8e )
  2572.     ROM_LOAD( "p47j_18.bin", 0x020000, 0x020000, 0x29d8f676 )
  2573.     ROM_LOAD( "p47j_26.bin", 0x040000, 0x020000, 0x4d07581a )
  2574.     ROM_RELOAD(              0x060000, 0x020000 )    /* why? */
  2575.  
  2576.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  2577.     ROM_LOAD( "p47j_20.bin", 0x000000, 0x020000, 0x2ed53624 )
  2578.     ROM_LOAD( "p47j_21.bin", 0x020000, 0x020000, 0x6f56b56d )
  2579.  
  2580.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  2581.     ROM_LOAD( "p47j_10.bin", 0x000000, 0x020000, 0xb9d79c1e )
  2582.     ROM_LOAD( "p47j_11.bin", 0x020000, 0x020000, 0xfa0d1887 )
  2583.  
  2584.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  2585.     ROM_LOAD( "prom.14m",    0x0000, 0x0200, 0x1d877538 )
  2586. ROM_END
  2587.  
  2588. INPUT_PORTS_START( p47 )
  2589.  
  2590.     COINS                        /* IN0 0x80001.b */
  2591. //    fire    bomb
  2592.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  2593.     RESERVE                        /* IN2 0x80004.b */
  2594.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  2595.  
  2596.     PORT_START            /* IN4 0x80006.b */
  2597.     COINAGE_6BITS_2
  2598.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
  2599.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  2600.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  2601.     PORT_BITX(    0x80, 0x80, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
  2602.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2603.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2604.  
  2605.     PORT_START            /* IN5 0x80007.b */
  2606.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
  2607.     PORT_DIPSETTING(    0x02, "2" )
  2608.     PORT_DIPSETTING(    0x03, "3" )
  2609.     PORT_DIPSETTING(    0x01, "4" )
  2610.     PORT_DIPSETTING(    0x00, "5" )
  2611.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  2612.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  2613.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2614.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  2615.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  2616.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2617.     PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
  2618.     PORT_DIPSETTING(    0x00, "Easy" )
  2619.     PORT_DIPSETTING(    0x30, "Normal" )
  2620.     PORT_DIPSETTING(    0x20, "Hard" )
  2621.     PORT_DIPSETTING(    0x10, "Hardest" )
  2622.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  2623.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  2624.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2625.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  2626.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2627.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2628.  
  2629. INPUT_PORTS_END
  2630.  
  2631.  
  2632.  
  2633.  
  2634. /***************************************************************************
  2635.  
  2636.                             [ Peek-a-Boo! ]
  2637.  
  2638. interrupts:
  2639.     1]         506>    rte
  2640.     2]         50a>    move.w  #$ffff, $1f0006.l
  2641.                     jsr     $46e0.l                rte
  2642.     3]         51c>    rte
  2643.     4]         520>    move.w  #$ffff, $1f000a.l    rte
  2644.     5-7]    53c>    rte
  2645.  
  2646. 3832    Show error (d7 = ram segment where error occurred)
  2647.         1 after d8000 ok. 3 after e0000&d0000 ok. 4 after ram&rom ok
  2648.  
  2649. 003E5E: 0000 3E72    [0]    Color Ram
  2650. 003E62: 0000 3E86    [1]    Video Ram
  2651. 003E66: 0000 3E9A    [2]    Sprite Ram
  2652. 003E6A: 0000 3EB0    [3]    Work Ram
  2653. 003E6E: 0000 3EC4    [4]    ROM
  2654.  
  2655. 000000-03ffff    rom (3f760 chksum)
  2656. 1f0000-1fffff    ram
  2657. 0d0000-0d3fff    text
  2658. 0d8000-0d87ff    palette (+200 = text palette)
  2659. 0e8000-0ebfff    layer
  2660. 0e0000-0e0001    2 dips, 1f003a<-!
  2661. 0f0000-0f0001    2 controls
  2662. 0f8000-0f8001    ???
  2663.  
  2664. 010000-010001    protection\watchdog;
  2665.     fb -> fb
  2666.     9x ->    0        watchdog reset?
  2667.             else    samples bank?
  2668.                     $1ff010 = sample
  2669.                     $1ff014 = bank = sample - $22 (33DC: 1 1 2 3 4 5 6 6 6 6)
  2670.                         samples:    bank:
  2671.                         $00-21        0
  2672.                         $22-2b        1-6
  2673. 000000-01ffff
  2674. 020000-03ffff    banked
  2675.  
  2676.     51 -> paddle p1
  2677.     52 -> paddle p2
  2678.     4bba waits for 1f000a to go !0, then clears 1f000a (int 4)
  2679.     4bca waits (100000) & FF == 3
  2680.     sequence $81, $71, $67 written
  2681.  
  2682.  
  2683. Scroll x,y,ctrl:
  2684. c2000<-1f0010        c2002<-1f0014        c2004<-1f000c
  2685.  
  2686. Scroll x,y,ctrl:
  2687. c2008<-1f0018        c200a<-1f001c        c200c<-1f000e
  2688.  
  2689. Layers ctrl:
  2690. c2208<-1f0024<<8 + 1f0026        c2308<-1f0022 | 1f002c
  2691.  
  2692. Sprite bank + ??
  2693. c2108<-1f005a + 1f0060 + 1f0062 + 1f0068
  2694.  
  2695. Sprite ctrl:
  2696. c2200<-0
  2697.  
  2698. 1f0000.w    routine index, table at $fae:
  2699.     0: 4E40
  2700.     1: 4EC2
  2701.     2: 4F2C
  2702.     3: 4F70
  2703.     4: 4FBC
  2704.     5: 533A
  2705.     6: 5382
  2706.     7: 556E
  2707.  
  2708. 1f003c/40    paddle p1/p2
  2709. 1f0260/4.l    *** p1/p2 score/10 (BCD) ***
  2710. 1f02e6/8.w    *** p1/p2 current lives ***
  2711.             Bonus lives:    20K  100K  250K  500K 1000K
  2712. 1f02ee        current player (0/1)
  2713. 1f0380        hi score
  2714.  
  2715.  
  2716. ***************************************************************************/
  2717.  
  2718. ROM_START( peekaboo )
  2719.  
  2720.     ROM_REGION( 0x40000, REGION_CPU1 )        /* 68000 CPU Code */
  2721.     ROM_LOAD_EVEN( "j3", 0x000000, 0x020000, 0xf5f4cf33 )
  2722.     ROM_LOAD_ODD(  "j2", 0x000000, 0x020000, 0x7b3d430d )
  2723.  
  2724.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2725.     ROM_LOAD( "5",       0x000000, 0x080000, 0x34fa07bb )
  2726.  
  2727.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2728.     ROM_LOAD( "4",       0x000000, 0x020000, 0xf037794b )
  2729.  
  2730.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  2731.     // Unused
  2732.  
  2733.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  2734.     ROM_LOAD( "1",       0x000000, 0x080000, 0x5a444ecf )
  2735.  
  2736.     ROM_REGION( 0x120000, REGION_SOUND1 )        /* Samples */
  2737.     ROM_LOAD( "peeksamp.124", 0x000000, 0x020000, 0xe1206fa8 )
  2738.     ROM_CONTINUE(             0x040000, 0x0e0000             )
  2739.  
  2740.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  2741.     ROM_LOAD( "priority.69",    0x000000, 0x200, 0xb40bff56 )
  2742.  
  2743. ROM_END
  2744.  
  2745. INPUT_PORTS_START( peekaboo )
  2746.  
  2747.     PORT_START        /* IN0 - COINS + P1&P2 Buttons - .b */
  2748.     PORT_BIT(  0x0001, IP_ACTIVE_LOW, IPT_COIN3 )        // called "service"
  2749.     PORT_BIT(  0x0002, IP_ACTIVE_LOW, IPT_COIN4 )        // called "test"
  2750.     PORT_BIT(  0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
  2751.     PORT_BIT(  0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
  2752.     PORT_BIT(  0x0010, IP_ACTIVE_LOW, IPT_START1 )
  2753.     PORT_BIT(  0x0020, IP_ACTIVE_LOW, IPT_START2 )
  2754.     PORT_BIT(  0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
  2755.     PORT_BIT(  0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
  2756.     PORT_BIT(  0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 )
  2757.     PORT_BIT(  0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 )
  2758.     PORT_BIT(  0x0400, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  2759.     PORT_BIT(  0x0800, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  2760.     PORT_BIT(  0x1000, IP_ACTIVE_LOW, IPT_BUTTON3 )        // called "stage clear"
  2761.     PORT_BIT(  0x2000, IP_ACTIVE_LOW, IPT_BUTTON4 )        // called "option"
  2762.     PORT_BIT(  0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  2763.     PORT_BIT(  0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  2764.  
  2765. #define PEEKABOO_PADDLE(_FLAG_)    \
  2766.     PORT_ANALOG( 0x00ff, 0x0080, IPT_PADDLE | _FLAG_, 50, 10, 0x0018, 0x00e0 )
  2767.  
  2768.     PORT_START          /* IN1 - paddle p1 */
  2769.     PEEKABOO_PADDLE(IPF_PLAYER1)
  2770.  
  2771.     RESERVE                /* IN2 - fake port */
  2772.     PORT_START          /* IN3 - paddle p2 */
  2773.     PEEKABOO_PADDLE(/*IPF_PLAYER2*/ IPF_COCKTAIL)
  2774.  
  2775.     PORT_START            /* IN4 - DSW 1 - 1f003a.b<-e0000.b */
  2776.     COINAGE_6BITS_2
  2777.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )        // 1f0354<-
  2778.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  2779.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  2780.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )        // 1f0022/6e<-!
  2781.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2782.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2783.  
  2784.     PORT_START            /* IN5 - DSW 2 - 1f003b.b<-e0001.b */
  2785.     PORT_DIPNAME( 0x03, 0x03, "Unknown 2-0&1" )                // 1f0358<-!
  2786.     PORT_DIPSETTING(    0x03, "3" )
  2787.     PORT_DIPSETTING(    0x02, "2" )
  2788.     PORT_DIPSETTING(    0x01, "1" )
  2789.     PORT_DIPSETTING(    0x00, "0" )
  2790.     PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
  2791.     PORT_DIPNAME( 0x08, 0x08, "Movement?" )                    // 1f0392<-!
  2792.     PORT_DIPSETTING(    0x08, "Paddles" )
  2793.     PORT_DIPSETTING(    0x00, "Buttons" )
  2794.     PORT_DIPNAME( 0x30, 0x30, "Nudity" )                    // 1f0356<-!
  2795.     PORT_DIPSETTING(    0x30, "Female and Male (Full)" )
  2796.     PORT_DIPSETTING(    0x20, "Female (Full)" )
  2797.     PORT_DIPSETTING(    0x10, "Female (Partial)" )
  2798.     PORT_DIPSETTING(    0x00, "None" )
  2799.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )            // 1f006a<-!
  2800.     PORT_DIPSETTING(    0x40, DEF_STR( Upright ) )
  2801.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
  2802.     PORT_DIPNAME( 0x80, 0x80, "(controls?)Unknown 2-7" )    // 1f0074<-!
  2803.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )    // num of controls?
  2804.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2805.  
  2806. INPUT_PORTS_END
  2807.  
  2808.  
  2809.  
  2810. static int protection_val;
  2811.  
  2812. /* Read the input ports, through a protection device */
  2813. READ_HANDLER( protection_peekaboo_r )
  2814. {
  2815.     switch (protection_val)
  2816.     {
  2817.         case 0x02:    return 0x03;
  2818.         case 0x51:    return player1_r(0);
  2819.         case 0x52:    return player2_r(0);
  2820.         default:    return protection_val;
  2821.     }
  2822. }
  2823. WRITE_HANDLER( protection_peekaboo_w )
  2824. {
  2825.     static int bank;
  2826.     protection_val = data;
  2827.  
  2828.     if ((protection_val & 0x90) == 0x90)
  2829.     {
  2830.         unsigned char *RAM = memory_region(okim6295_interface_peekaboo.region[0]);
  2831.         int new_bank = (protection_val & 0x7) % 7;
  2832.  
  2833.         if (bank != new_bank)
  2834.         {
  2835.             memcpy(&RAM[0x20000],&RAM[0x40000 + 0x20000*new_bank],0x20000);
  2836.             bank = new_bank;
  2837.         }
  2838.     }
  2839.  
  2840.     cpu_cause_interrupt(0,4);
  2841. }
  2842.  
  2843.  
  2844. /***************************************************************************
  2845.  
  2846.                             [ Plus Alpha ]
  2847.                           (aka Flight Alpha)
  2848.  
  2849. f2ef8.w        bombs
  2850. f309e.w        *** lives       ***
  2851. f30a4.l        *** score (BCD) ***
  2852.  
  2853. ***************************************************************************/
  2854.  
  2855. ROM_START( plusalph )
  2856.     ROM_REGION( 0x60000, REGION_CPU1 )        /* Main CPU Code */
  2857.     ROM_LOAD_EVEN( "pa-rom2.bin", 0x000000, 0x020000, 0x33244799 )
  2858.     ROM_LOAD_ODD(  "pa-rom1.bin", 0x000000, 0x020000, 0xa32fdcae )
  2859.     ROM_LOAD_EVEN( "pa-rom3.bin", 0x040000, 0x010000, 0x1b739835 )
  2860.     ROM_LOAD_ODD(  "pa-rom4.bin", 0x040000, 0x010000, 0xff760e80 )
  2861.  
  2862.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  2863.     ROM_LOAD_EVEN( "pa-rom5.bin", 0x000000, 0x010000, 0xddc2739b )
  2864.     ROM_LOAD_ODD(  "pa-rom6.bin", 0x000000, 0x010000, 0xf6f8a167 )
  2865.  
  2866.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2867.     ROM_LOAD( "pa-rom11.bin", 0x000000, 0x020000, 0xeb709ae7 )
  2868.     ROM_LOAD( "pa-rom12.bin", 0x020000, 0x020000, 0xcacbc350 )
  2869.     ROM_LOAD( "pa-rom13.bin", 0x040000, 0x020000, 0xfad093dd )
  2870.     ROM_LOAD( "pa-rom14.bin", 0x060000, 0x020000, 0xd3676cd1 )
  2871.  
  2872.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2873.     ROM_LOAD( "pa-rom15.bin", 0x000000, 0x020000, 0x8787735b )
  2874.     ROM_LOAD( "pa-rom16.bin", 0x020000, 0x020000, 0xa06b813b )
  2875.     ROM_LOAD( "pa-rom17.bin", 0x040000, 0x020000, 0xc6b38a4b )
  2876.     /* empty place */
  2877.  
  2878.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  2879.     ROM_LOAD( "pa-rom19.bin", 0x000000, 0x010000, 0x39ef193c )
  2880.  
  2881.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  2882.     ROM_LOAD( "pa-rom20.bin", 0x000000, 0x020000, 0x86c557a8 )
  2883.     ROM_LOAD( "pa-rom21.bin", 0x020000, 0x020000, 0x81140a88 )
  2884.     ROM_LOAD( "pa-rom22.bin", 0x040000, 0x020000, 0x97e39886 )
  2885.     ROM_LOAD( "pa-rom23.bin", 0x060000, 0x020000, 0x0383fb65 )
  2886.  
  2887.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  2888.     ROM_LOAD( "pa-rom9.bin",  0x000000, 0x020000, 0x065364bd )
  2889.     ROM_LOAD( "pa-rom10.bin", 0x020000, 0x020000, 0x395df3b2 )
  2890.  
  2891.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  2892.     ROM_LOAD( "pa-rom7.bin",  0x000000, 0x020000, 0x9f5d800e )
  2893.     ROM_LOAD( "pa-rom8.bin",  0x020000, 0x020000, 0xae007750 )
  2894.  
  2895.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  2896.     ROM_LOAD( "prom.14m",     0x0000, 0x0200, 0x1d877538 )
  2897. ROM_END
  2898.  
  2899. INPUT_PORTS_START( plusalph )
  2900.     COINS                        /* IN0 0x80001.b */
  2901. //    fire    bomb
  2902.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  2903.     RESERVE                        /* IN2 0x80004.b */
  2904.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  2905.  
  2906.     PORT_START            /* IN4 0x80006.b */
  2907.     COINAGE_6BITS
  2908.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
  2909.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  2910.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  2911.     PORT_BITX(    0x80, 0x80, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Freeze Screen", IP_KEY_NONE, IP_JOY_NONE )
  2912.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2913.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2914.  
  2915.     PORT_START            /* IN5 0x80007.b */
  2916.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
  2917.     PORT_DIPSETTING(    0x03, "3" )
  2918.     PORT_DIPSETTING(    0x02, "4" )
  2919.     PORT_DIPSETTING(    0x01, "5" )
  2920.     PORT_BITX( 0,       0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Inifinite", IP_KEY_NONE, IP_JOY_NONE )
  2921.     PORT_DIPNAME( 0x04, 0x04, "Bombs" )
  2922.     PORT_DIPSETTING(    0x00, "2" )
  2923.     PORT_DIPSETTING(    0x04, "3" )
  2924.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Bonus_Life ) )
  2925.     PORT_DIPSETTING(    0x08, "70k and every 130k")
  2926.     PORT_DIPSETTING(    0x00, "100k and every 200k")
  2927.     PORT_DIPNAME( 0x30, 0x30, "?Difficulty?" )
  2928.     PORT_DIPSETTING(    0x30, "3" )    // 1
  2929.     PORT_DIPSETTING(    0x20, "2" )    // 3
  2930.     PORT_DIPSETTING(    0x10, "1" )    // 2
  2931.     PORT_DIPSETTING(    0x00, "0" )    // 0
  2932.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
  2933.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  2934.     PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
  2935.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  2936.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  2937.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  2938.  
  2939. INPUT_PORTS_END
  2940.  
  2941. static void init_plusalph(void)
  2942. {
  2943.     unsigned char *RAM;
  2944.  
  2945.     astyanax_rom_decode(0);
  2946.  
  2947.     RAM  = memory_region(REGION_CPU1);
  2948.     WRITE_WORD(&RAM[0x0012b6],0x0000);    // protection
  2949. }
  2950.  
  2951.  
  2952. /***************************************************************************
  2953.  
  2954.                             [ RodLand ]
  2955.  
  2956. (World version)
  2957. interrupts:    1] 418->3864: rts    2] 420: move.w #-1,f0010; jsr 3866    3] rte
  2958.  
  2959. 213da    print test error (20c12 = string address 0-4)
  2960.  
  2961. f0018->84200    f0020->84208    f0028->84008
  2962. f001c->84202    f0024->8420a    f002c->8400a
  2963. f0012->84204    f0014->8420c    f0016->8400c
  2964.  
  2965. 7fe        d0.w -> 84000.w & f000e.w
  2966. 81a        d0/d1/d2 & $D -> 84204 / 8420c /8400c
  2967.  
  2968. ***************************************************************************/
  2969.  
  2970. ROM_START( rodland )
  2971.     ROM_REGION( 0x60000, REGION_CPU1 )        /* Main CPU Code */
  2972.     ROM_LOAD_EVEN( "rl_02.rom", 0x000000, 0x020000, 0xc7e00593 )
  2973.     ROM_LOAD_ODD(  "rl_01.rom", 0x000000, 0x020000, 0x2e748ca1 )
  2974.     ROM_LOAD_EVEN( "rl_03.rom", 0x040000, 0x010000, 0x62fdf6d7 )
  2975.     ROM_LOAD_ODD(  "rl_04.rom", 0x040000, 0x010000, 0x44163c86 )
  2976.  
  2977.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  2978.     ROM_LOAD_EVEN( "rl_05.rom", 0x000000, 0x010000, 0xc1617c28 )
  2979.     ROM_LOAD_ODD(  "rl_06.rom", 0x000000, 0x010000, 0x663392b2 )
  2980.  
  2981.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  2982.     ROM_LOAD( "rl_23.rom", 0x000000, 0x020000, 0xac60e771 )
  2983.     ROM_CONTINUE(          0x030000, 0x010000             )
  2984.     ROM_CONTINUE(          0x050000, 0x010000             )
  2985.     ROM_CONTINUE(          0x020000, 0x010000             )
  2986.     ROM_CONTINUE(          0x040000, 0x010000             )
  2987.     ROM_CONTINUE(          0x060000, 0x020000             )
  2988.  
  2989.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  2990.     ROM_LOAD( "rl_18.rom", 0x000000, 0x080000, 0xf3b30ca6 )
  2991.  
  2992.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  2993.     ROM_LOAD( "rl_19.rom", 0x000000, 0x020000, 0x1b718e2a )
  2994.  
  2995.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  2996.     ROM_LOAD( "rl_14.rom", 0x000000, 0x080000, 0x08d01bf4 )
  2997.  
  2998.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  2999.     ROM_LOAD( "rl_10.rom", 0x000000, 0x040000, 0xe1d1cd99 )
  3000.  
  3001.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  3002.     ROM_LOAD( "rl_08.rom", 0x000000, 0x040000, 0x8a49d3a7 )
  3003.  
  3004.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  3005.     ROM_LOAD( "rl.bin",    0x0000, 0x0200, 0x8914e72d )
  3006. ROM_END
  3007.  
  3008.  
  3009. ROM_START( rodlandj )
  3010.     ROM_REGION( 0x60000, REGION_CPU1 )        /* Main CPU Code */
  3011.     ROM_LOAD_EVEN( "rl19.bin", 0x000000, 0x010000, 0x028de21f )
  3012.     ROM_LOAD_ODD(  "rl17.bin", 0x000000, 0x010000, 0x9c720046 )
  3013.     ROM_LOAD_EVEN( "rl20.bin", 0x020000, 0x010000, 0x3f536d07 )
  3014.     ROM_LOAD_ODD(  "rl18.bin", 0x020000, 0x010000, 0x5aa61717 )
  3015.     ROM_LOAD_EVEN( "rl12.bin", 0x040000, 0x010000, 0xc5b1075f )    // ~ rl_03.rom
  3016.     ROM_LOAD_ODD(  "rl11.bin", 0x040000, 0x010000, 0x9ec61048 )    // ~ rl_04.rom
  3017.  
  3018.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  3019.     ROM_LOAD_EVEN( "rl02.bin", 0x000000, 0x010000, 0xd26eae8f )
  3020.     ROM_LOAD_ODD(  "rl01.bin", 0x000000, 0x010000, 0x04cf24bc )
  3021.  
  3022.     // bg RL_23 = 27, 28, 29b, 29a, 31a?, 30?, ?, 31b?
  3023.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  3024.     ROM_LOAD( "rl27.bin",  0x000000, 0x010000, 0x673a5986 )
  3025.     ROM_LOAD( "rl28.bin",  0x010000, 0x010000, 0x523a731d )
  3026.     ROM_LOAD( "rl26.bin",  0x020000, 0x010000, 0x4d0a5c97 )
  3027.     ROM_LOAD( "rl29a.bin", 0x030000, 0x010000, 0x9fd628f1 )
  3028.     ROM_LOAD( "rl29b.bin", 0x040000, 0x010000, 0x2279cb76 )
  3029.     ROM_LOAD( "rl30.bin",  0x050000, 0x010000, 0xb155f39e )
  3030.     ROM_LOAD( "rl31a.bin", 0x060000, 0x010000, 0xa9bc5b84 )
  3031.     ROM_LOAD( "rl31b.bin", 0x070000, 0x010000, 0xfb2faa69 )
  3032.  
  3033.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  3034.     ROM_LOAD( "rl21.bin",  0x000000, 0x010000, 0x32fc0bc6 )    // bg = RL_18
  3035.     ROM_LOAD( "rl22.bin",  0x010000, 0x010000, 0x0969daa9 )
  3036.     ROM_LOAD( "rl13.bin",  0x020000, 0x010000, 0x1203cdf6 )
  3037.     ROM_LOAD( "rl14.bin",  0x030000, 0x010000, 0xd53e094b )
  3038.     ROM_LOAD( "rl24.bin",  0x040000, 0x010000, 0xb04343e6 )
  3039.     ROM_LOAD( "rl23.bin",  0x050000, 0x010000, 0x70aa7e2c )
  3040.     ROM_LOAD( "rl15.bin",  0x060000, 0x010000, 0x38ac846e )
  3041.     ROM_LOAD( "rl16.bin",  0x070000, 0x010000, 0x5e31f0b2 )
  3042.  
  3043.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  3044.     ROM_LOAD( "rl25.bin",  0x000000, 0x010000, 0x4ca57cb6 )    // txt = RL_19
  3045.     // Filled with pen 15 at startup
  3046.  
  3047.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  3048.     ROM_LOAD( "rl04.bin",  0x000000, 0x010000, 0xcfcf9f97 )    // sprites = RL_14
  3049.     ROM_LOAD( "rl05.bin",  0x010000, 0x010000, 0x38c05d15 )
  3050.     ROM_LOAD( "rl07.bin",  0x020000, 0x010000, 0xe117cb72 )
  3051.     ROM_LOAD( "rl08.bin",  0x030000, 0x010000, 0x2f9b40c3 )
  3052.     ROM_LOAD( "rl03.bin",  0x040000, 0x010000, 0xf6a88efd )
  3053.     ROM_LOAD( "rl06.bin",  0x050000, 0x010000, 0x90a78af1 )
  3054.     ROM_LOAD( "rl09.bin",  0x060000, 0x010000, 0x427a0908 )
  3055.     ROM_LOAD( "rl10.bin",  0x070000, 0x010000, 0x53cc2c11 )
  3056.  
  3057.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  3058.     ROM_LOAD( "rl_10.rom", 0x000000, 0x040000, 0xe1d1cd99 )
  3059.  
  3060.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  3061.     ROM_LOAD( "rl_08.rom", 0x000000, 0x040000, 0x8a49d3a7 )
  3062.  
  3063.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  3064.     ROM_LOAD( "rl.bin",    0x0000, 0x0200, 0x8914e72d )
  3065. ROM_END
  3066.  
  3067.  
  3068. INPUT_PORTS_START( rodland )
  3069.  
  3070.     COINS                        /* IN0 0x80001.b */
  3071. //    fire    ladder
  3072.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  3073.     RESERVE                        /* IN2 0x80004.b */
  3074.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  3075.  
  3076.     PORT_START            /* IN4 0x80006.b */
  3077.     COINAGE_6BITS
  3078.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
  3079.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  3080.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  3081.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  3082.  
  3083.     PORT_START            /* IN5 0x80007.b */
  3084.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) /* according to manual */
  3085.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  3086.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  3087.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) /* according to manual */
  3088.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  3089.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  3090.     PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) )
  3091.     PORT_DIPSETTING(    0x04, "2" )
  3092.     PORT_DIPSETTING(    0x0c, "3" )
  3093.     PORT_DIPSETTING(    0x08, "4" )
  3094.     PORT_BITX( 0,       0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Inifinite", IP_KEY_NONE, IP_JOY_NONE )
  3095.     PORT_DIPNAME( 0x10, 0x10, "Default episode" )
  3096.     PORT_DIPSETTING(    0x10, "1" )
  3097.     PORT_DIPSETTING(    0x00, "2" )
  3098.     PORT_DIPNAME( 0x60, 0x60, DEF_STR( Difficulty ) )
  3099.     PORT_DIPSETTING(    0x20, "Easy?" )
  3100.     PORT_DIPSETTING(    0x60, "Normal" )
  3101.     PORT_DIPSETTING(    0x40, "Hard?" )
  3102.     PORT_DIPSETTING(    0x00, "Hardest?" )
  3103.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  3104.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  3105.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  3106.  
  3107. INPUT_PORTS_END
  3108.  
  3109.  
  3110. void rodland_rom_decode(int cpu)
  3111. {
  3112.     unsigned char    *RAM    =    memory_region(REGION_CPU1+cpu);
  3113.     int i,            size    =    memory_region_length(REGION_CPU1+cpu);
  3114.     if (size > 0x40000)    size = 0x40000;
  3115.  
  3116.     for (i = 0 ; i < size ; i+=2)
  3117.     {
  3118.         int x,y;
  3119.  
  3120.         x = READ_WORD(&RAM[i]);
  3121.  
  3122. // [0] d0a9 6ebf 5c72 3814    [1] 4567 0123 ba98 fedc
  3123. // [2] fdb9 ce07 5318 a246    [3] 4512 ed3b a967 08fc
  3124. #define BITSWAP_0    BITSWAP(x,0xd,0x0,0xa,0x9,0x6,0xe,0xb,0xf,0x5,0xc,0x7,0x2,0x3,0x8,0x1,0x4);
  3125. #define BITSWAP_1    BITSWAP(x,0x4,0x5,0x6,0x7,0x0,0x1,0x2,0x3,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc);
  3126. #define    BITSWAP_2    BITSWAP(x,0xf,0xd,0xb,0x9,0xc,0xe,0x0,0x7,0x5,0x3,0x1,0x8,0xa,0x2,0x4,0x6);
  3127. #define    BITSWAP_3    BITSWAP(x,0x4,0x5,0x1,0x2,0xe,0xd,0x3,0xb,0xa,0x9,0x6,0x7,0x0,0x8,0xf,0xc);
  3128.  
  3129.         if        (i < 0x08000)    {    if ( (i | 0x248) != i ) {y = BITSWAP_0;} else {y = BITSWAP_1;} }
  3130.         else if    (i < 0x10000)    {    if ( (i | 0x248) != i ) {y = BITSWAP_2;} else {y = BITSWAP_3;} }
  3131.         else if    (i < 0x18000)    {    if ( (i | 0x248) != i ) {y = BITSWAP_0;} else {y = BITSWAP_1;} }
  3132.         else if    (i < 0x20000)    { y = BITSWAP_1; }
  3133.         else                     { y = BITSWAP_3; }
  3134.  
  3135. #undef    BITSWAP_0
  3136. #undef    BITSWAP_1
  3137. #undef    BITSWAP_2
  3138. #undef    BITSWAP_3
  3139.  
  3140.         WRITE_WORD(&RAM[i],y);
  3141.     }
  3142. }
  3143.  
  3144.  
  3145. static void init_rodland(void)
  3146. {
  3147.     unsigned char *RAM = memory_region(REGION_GFX3);    // scroll 2
  3148.  
  3149.     /* Second half of the text gfx should be all FF's, not 0's
  3150.        (is this right ? Otherwise the subtitle is wrong) */
  3151.     memset( &RAM[0x10000], 0xFF , 0x10000);
  3152.  
  3153.     rodland_rom_decode(0);
  3154. }
  3155.  
  3156. static void init_rodlandj(void)
  3157. {
  3158.     unsigned char *RAM = memory_region(REGION_GFX3);    // scroll 2
  3159.  
  3160.     /* Second half of the text gfx should be all FF's, not 0's
  3161.        (is this right ? Otherwise the subtitle is wrong) */
  3162.     memset( &RAM[0x10000], 0xFF , 0x10000);
  3163. }
  3164.  
  3165.  
  3166. /***************************************************************************
  3167.  
  3168.                             [ Saint Dragon ]
  3169.  
  3170.             *** Press coin on startup to enter test mode ***
  3171.  
  3172. interrupts:    1] rte    2] 620    3] 5e6
  3173.  
  3174. ***************************************************************************/
  3175.  
  3176. ROM_START( stdragon )
  3177.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  3178.     ROM_LOAD_EVEN( "jsd-02.bin", 0x000000, 0x020000, 0xcc29ab19 )
  3179.     ROM_LOAD_ODD(  "jsd-01.bin", 0x000000, 0x020000, 0x67429a57 )
  3180.  
  3181.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  3182.     ROM_LOAD_EVEN( "jsd-05.bin", 0x000000, 0x010000, 0x8c04feaa )
  3183.     ROM_LOAD_ODD(  "jsd-06.bin", 0x000000, 0x010000, 0x0bb62f3a )
  3184.  
  3185.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  3186.     ROM_LOAD( "jsd-11.bin", 0x000000, 0x020000, 0x2783b7b1 )
  3187.     ROM_LOAD( "jsd-12.bin", 0x020000, 0x020000, 0x89466ab7 )
  3188.     ROM_LOAD( "jsd-13.bin", 0x040000, 0x020000, 0x9896ae82 )
  3189.     ROM_LOAD( "jsd-14.bin", 0x060000, 0x020000, 0x7e8da371 )
  3190.  
  3191.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  3192.     ROM_LOAD( "jsd-15.bin", 0x000000, 0x020000, 0xe296bf59 )
  3193.     ROM_LOAD( "jsd-16.bin", 0x020000, 0x020000, 0xd8919c06 )
  3194.     ROM_LOAD( "jsd-17.bin", 0x040000, 0x020000, 0x4f7ad563 )
  3195.     ROM_LOAD( "jsd-18.bin", 0x060000, 0x020000, 0x1f4da822 )
  3196.  
  3197.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  3198.     ROM_LOAD( "jsd-19.bin", 0x000000, 0x010000, 0x25ce807d )
  3199.  
  3200.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  3201.     ROM_LOAD( "jsd-20.bin", 0x000000, 0x020000, 0x2c6e93bb )
  3202.     ROM_LOAD( "jsd-21.bin", 0x020000, 0x020000, 0x864bcc61 )
  3203.     ROM_LOAD( "jsd-22.bin", 0x040000, 0x020000, 0x44fe2547 )
  3204.     ROM_LOAD( "jsd-23.bin", 0x060000, 0x020000, 0x6b010e1a )
  3205.  
  3206.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  3207.     ROM_LOAD( "jsd-09.bin", 0x000000, 0x020000, 0xe366bc5a )
  3208.     ROM_LOAD( "jsd-10.bin", 0x020000, 0x020000, 0x4a8f4fe6 )
  3209.  
  3210.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  3211.     ROM_LOAD( "jsd-07.bin", 0x000000, 0x020000, 0x6a48e979 )
  3212.     ROM_LOAD( "jsd-08.bin", 0x020000, 0x020000, 0x40704962 )
  3213.  
  3214.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  3215.     ROM_LOAD( "prom.14m",    0x0000, 0x0200, 0x1d877538 )
  3216. ROM_END
  3217.  
  3218. INPUT_PORTS_START( stdragon )
  3219.     COINS                        /* IN0 0x80001.b */
  3220. //    fire    fire
  3221.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  3222.     RESERVE                        /* IN2 0x80004.b */
  3223.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  3224.  
  3225.     PORT_START            /* IN4 0x80006.b */
  3226.     COINAGE_6BITS_2
  3227.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
  3228.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  3229.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  3230.     PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" )    // used?
  3231.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  3232.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  3233.  
  3234.     PORT_START            /* IN5 0x80007.b */
  3235.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
  3236.     PORT_DIPSETTING(    0x02, "2" )
  3237.     PORT_DIPSETTING(    0x03, "3" )
  3238.     PORT_DIPSETTING(    0x01, "4" )
  3239.     PORT_DIPSETTING(    0x00, "5" )
  3240.     PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" )    // unused?
  3241.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  3242.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  3243.     PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" )    // unused?
  3244.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  3245.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  3246.     PORT_DIPNAME( 0x30, 0x30, "?Difficulty?" )
  3247.     PORT_DIPSETTING(    0x30, "3" )
  3248.     PORT_DIPSETTING(    0x20, "2" )
  3249.     PORT_DIPSETTING(    0x10, "1" )
  3250.     PORT_DIPSETTING(    0x00, "0" )
  3251.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
  3252.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  3253.     PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
  3254.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  3255.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  3256.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  3257.  
  3258. INPUT_PORTS_END
  3259.  
  3260. static void init_stdragon(void)
  3261. {
  3262.     unsigned char *RAM;
  3263.  
  3264.     phantasm_rom_decode(0);
  3265.  
  3266.     RAM  = memory_region(REGION_CPU1);
  3267.     WRITE_WORD(&RAM[0x00045e],0x0098);    // protection
  3268. }
  3269.  
  3270.  
  3271. /***************************************************************************
  3272.  
  3273.                                 [ Soldam ]
  3274.  
  3275. (Japan version)
  3276. f00c2.l    *** score/10 (BCD) ***
  3277.  
  3278. The country code is at ROM address $3a9d, copied to RAM address
  3279. f0025: 0 = japan, 1 = USA. Change f0025 to 1 to have all the
  3280. text in english.
  3281.  
  3282. ***************************************************************************/
  3283.  
  3284. ROM_START( soldamj )
  3285.     ROM_REGION( 0x60000, REGION_CPU1 )        /* Main CPU Code */
  3286.     ROM_LOAD_EVEN( "soldam2.bin", 0x000000, 0x020000, 0xc73d29e4 )
  3287.     ROM_LOAD_ODD(  "soldam1.bin", 0x000000, 0x020000, 0xe7cb0c20 )
  3288.     ROM_LOAD_EVEN( "soldam3.bin", 0x040000, 0x010000, 0xc5382a07 )
  3289.     ROM_LOAD_ODD(  "soldam4.bin", 0x040000, 0x010000, 0x1df7816f )
  3290.  
  3291.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  3292.     ROM_LOAD_EVEN( "soldam5.bin", 0x000000, 0x010000, 0xd1019a67 )
  3293.     ROM_LOAD_ODD(  "soldam6.bin", 0x000000, 0x010000, 0x3ed219b4 )
  3294.  
  3295.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  3296.     ROM_LOAD( "soldam14.bin", 0x000000, 0x080000, 0x26cea54a )
  3297.  
  3298.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  3299.     ROM_LOAD( "soldam18.bin", 0x000000, 0x080000, 0x7d8e4712 )
  3300.  
  3301.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  3302.     ROM_LOAD( "soldam19.bin", 0x000000, 0x020000, 0x38465da1 )
  3303.  
  3304.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  3305.     ROM_LOAD( "soldam23.bin", 0x000000, 0x080000, 0x0ca09432 )
  3306.  
  3307.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  3308.     ROM_LOAD( "soldam10.bin", 0x000000, 0x040000, 0x8d5613bf )
  3309.  
  3310.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  3311.     ROM_LOAD( "soldam8.bin",  0x000000, 0x040000, 0xfcd36019 )
  3312.  
  3313.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  3314.     ROM_LOAD( "prom",    0x0000, 0x0200, 0x00000000 )
  3315. ROM_END
  3316.  
  3317. INPUT_PORTS_START( soldamj )
  3318.     COINS                        /* IN0 0x80001.b */
  3319.     //    turn    turn    (3rd button is shown in service mode, but seems unused)
  3320.     JOY_2BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  3321.     RESERVE                        /* IN2 0x80004.b */
  3322.     JOY_2BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  3323.  
  3324.     PORT_START            /* IN4 0x80006.b */
  3325.     COINAGE_6BITS_2
  3326.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
  3327.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  3328.     PORT_DIPSETTING(    0x40, DEF_STR( On )  )
  3329.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  3330.  
  3331.     PORT_START            /* IN5 0x80007.b */
  3332.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
  3333.     PORT_DIPSETTING(    0x00, "Easy"   )
  3334.     PORT_DIPSETTING(    0x03, "Normal" )
  3335.     PORT_DIPSETTING(    0x02, "Hard"   )
  3336.     PORT_DIPSETTING(    0x01, "Hadest" )
  3337.     PORT_DIPNAME( 0x0c, 0x0c, "Games To Play (Vs)" )
  3338.     PORT_DIPSETTING(    0x00, "1" )
  3339.     PORT_DIPSETTING(    0x0c, "2" )
  3340.     PORT_DIPSETTING(    0x08, "3" )
  3341.     PORT_DIPSETTING(    0x04, "4" )
  3342.     PORT_DIPNAME( 0x10, 0x10, "Allow Continue" )
  3343.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  3344.     PORT_DIPSETTING(    0x10, DEF_STR( On )  )
  3345.     PORT_DIPNAME( 0x20, 0x20, "Credits To Start (Vs)" )
  3346.     PORT_DIPSETTING(    0x20, "1" )
  3347.     PORT_DIPSETTING(    0x00, "2" )
  3348.     PORT_DIPNAME( 0x40, 0x40, "Credits To Continue (Vs)" )
  3349.     PORT_DIPSETTING(    0x40, "1" )
  3350.     PORT_DIPSETTING(    0x00, "2" )
  3351.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  3352.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  3353.     PORT_DIPSETTING(    0x00, DEF_STR( On )  )
  3354.  
  3355. INPUT_PORTS_END
  3356.  
  3357. READ_HANDLER( soldamj_spriteram_r )
  3358. {
  3359.     return READ_WORD(&spriteram[offset]);
  3360. }
  3361. WRITE_HANDLER( soldamj_spriteram_w )
  3362. {
  3363.     if (offset < 0x800)    COMBINE_WORD_MEM(&spriteram[offset],data);
  3364. }
  3365.  
  3366. static void init_soldam(void)
  3367. {
  3368.     astyanax_rom_decode(0);
  3369.  
  3370.     /* Sprite RAM is mirrored. Why? */
  3371.     install_mem_read_handler (0, 0x8c000, 0x8cfff, soldamj_spriteram_r);
  3372.     install_mem_write_handler(0, 0x8c000, 0x8cfff, soldamj_spriteram_w);
  3373. }
  3374.  
  3375.  
  3376.  
  3377. /***************************************************************************
  3378.  
  3379.                             [ Takeda Shingen ]
  3380.  
  3381. ***************************************************************************/
  3382.  
  3383. ROM_START( tshingen )
  3384.     ROM_REGION( 0x40000, REGION_CPU1 )        /* Main CPU Code */
  3385.     ROM_LOAD_EVEN( "takeda2.bin", 0x000000, 0x020000, 0x6ddfc9f3 )
  3386.     ROM_LOAD_ODD(  "takeda1.bin", 0x000000, 0x020000, 0x1afc6b7d )
  3387.  
  3388.     ROM_REGION( 0x20000, REGION_CPU2 )        /* Sound CPU Code */
  3389.     ROM_LOAD_EVEN( "takeda5.bin", 0x000000, 0x010000, 0xfbdc51c0 )
  3390.     ROM_LOAD_ODD(  "takeda6.bin", 0x000000, 0x010000, 0x8fa65b69 )
  3391.  
  3392.     ROM_REGION( 0x080000, REGION_GFX1 | REGIONFLAG_DISPOSE ) /* Scroll 0 */
  3393.     ROM_LOAD( "takeda11.bin", 0x000000, 0x020000, 0xbf0b40a6 )
  3394.     ROM_LOAD( "takeda12.bin", 0x020000, 0x020000, 0x07987d89 )
  3395.  
  3396.     ROM_REGION( 0x080000, REGION_GFX2 | REGIONFLAG_DISPOSE ) /* Scroll 1 */
  3397.     ROM_LOAD( "takeda15.bin", 0x000000, 0x020000, 0x4c316b79 )
  3398.     ROM_LOAD( "takeda16.bin", 0x020000, 0x020000, 0xceda9dd6 )
  3399.     ROM_LOAD( "takeda17.bin", 0x040000, 0x020000, 0x3d4371dc )
  3400.  
  3401.     ROM_REGION( 0x020000, REGION_GFX3 | REGIONFLAG_DISPOSE ) /* Scroll 2 */
  3402.     ROM_LOAD( "takeda19.bin", 0x000000, 0x010000, 0x2ca2420d )
  3403.  
  3404.     ROM_REGION( 0x080000, REGION_GFX4 | REGIONFLAG_DISPOSE ) /* Sprites */
  3405.     ROM_LOAD( "takeda20.bin", 0x000000, 0x020000, 0x1bfd636f )
  3406.     ROM_LOAD( "takeda21.bin", 0x020000, 0x020000, 0x12fb006b )
  3407.     ROM_LOAD( "takeda22.bin", 0x040000, 0x020000, 0xb165b6ae )
  3408.     ROM_LOAD( "takeda23.bin", 0x060000, 0x020000, 0x37cb9214 )
  3409.  
  3410.     ROM_REGION( 0x040000, REGION_SOUND1 )        /* Samples */
  3411.     ROM_LOAD( "takeda9.bin",  0x000000, 0x020000, 0xdb7f3f4f )
  3412.     ROM_LOAD( "takeda10.bin", 0x020000, 0x020000, 0xc9959d71 )
  3413.  
  3414.     ROM_REGION( 0x040000, REGION_SOUND2 )        /* Samples */
  3415.     ROM_LOAD( "takeda8.bin",  0x000000, 0x040000, 0xdde779d2 )
  3416.  
  3417.     ROM_REGION( 0x0200, REGION_PROMS )        /* Priority PROM */
  3418.     ROM_LOAD( "prom",    0x0000, 0x0200, 0x00000000 )
  3419. ROM_END
  3420.  
  3421. INPUT_PORTS_START( tshingen )
  3422.     COINS                        /* IN0 0x80001.b */
  3423.     // sword_left    sword_right        jump
  3424.     JOY_3BUTTONS(IPF_PLAYER1)    /* IN1 0x80003.b */
  3425.     RESERVE                        /* IN2 0x80004.b */
  3426.     JOY_3BUTTONS(IPF_PLAYER2)    /* IN3 0x80005.b */
  3427.  
  3428.     PORT_START            /* IN4 0x80006.b */
  3429.     COINAGE_6BITS
  3430.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
  3431.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  3432.     PORT_DIPSETTING(    0x40, DEF_STR( On )  )
  3433.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
  3434.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  3435.     PORT_DIPSETTING(    0x80, DEF_STR( On )  )
  3436.  
  3437.     PORT_START            /* IN5 0x80007.b */
  3438.     PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) )
  3439.     PORT_DIPSETTING(    0x03, "2" )
  3440.     PORT_DIPSETTING(    0x01, "3" )
  3441.     PORT_DIPSETTING(    0x02, "4" )
  3442.     PORT_BITX( 0,       0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Inifinite", IP_KEY_NONE, IP_JOY_NONE )
  3443.     PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
  3444.     PORT_DIPSETTING(    0x0c, "20k" )
  3445.     PORT_DIPSETTING(    0x04, "30k" )
  3446.     PORT_DIPSETTING(    0x08, "40k" )
  3447.     PORT_DIPSETTING(    0x00, "50k" )
  3448.     PORT_DIPNAME( 0x30, 0x10, DEF_STR( Difficulty ) ) // damage when hit
  3449.     PORT_DIPSETTING(    0x30, "Easy"    ) // 0
  3450.     PORT_DIPSETTING(    0x10, "Normal"  ) // 1
  3451.     PORT_DIPSETTING(    0x20, "Hard"    ) // 2
  3452.     PORT_DIPSETTING(    0x00, "Hardest" ) // 3
  3453.     PORT_DIPNAME( 0x40, 0x40, "Allow Continue" )
  3454.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  3455.     PORT_DIPSETTING(    0x40, DEF_STR( On )  )
  3456.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  3457.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  3458.     PORT_DIPSETTING(    0x00, DEF_STR( On )  )
  3459.  
  3460. INPUT_PORTS_END
  3461.  
  3462. static void init_tshingen(void)
  3463. {
  3464.     phantasm_rom_decode(0);
  3465. }
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473. /***************************************************************************
  3474.  
  3475.                                 Game drivers
  3476.  
  3477. ***************************************************************************/
  3478.  
  3479.  
  3480. GAME( 1991, 64street, 0,        64street, 64street, 64street, ROT0,       "Jaleco", "64th. Street - A Detective Story (World)" )
  3481. GAME( 1991, 64streej, 64street, 64street, 64street, 64street, ROT0,       "Jaleco", "64th. Street - A Detective Story (Japan)" )
  3482. GAME( 1989, astyanax, 0,        astyanax, astyanax, astyanax, ROT0_16BIT, "Jaleco", "The Astyanax" )
  3483. GAME( 1989, lordofk,  astyanax, astyanax, astyanax, astyanax, ROT0_16BIT, "Jaleco", "The Lord of King (Japan)" )
  3484. GAME( 1991, avspirit, 0,        avspirit, avspirit, avspirit, ROT0,       "Jaleco", "Avenging Spirit" )
  3485. GAME( 1990, phantasm, avspirit, phantasm, phantasm, phantasm, ROT0,       "Jaleco", "Phantasm (Japan)" )
  3486. GAME( 1992, bigstrik, 0,        bigstrik, bigstrik, bigstrik, ROT0,       "Jaleco", "Big Striker" )
  3487. GAME( 1993, chimerab, 0,        chimerab, chimerab, chimerab, ROT0,       "Jaleco", "Chimera Beast" )
  3488. GAME( 1993, cybattlr, 0,        cybattlr, cybattlr, cybattlr, ROT90,      "Jaleco", "Cybattler" )
  3489. GAME( 1991, edf,      0,        edf,      edf,      edf,      ROT0,       "Jaleco", "Earth Defense Force" )
  3490. GAME( 1989, hachoo,   0,        hachoo,   hachoo,   hachoo,   ROT0,       "Jaleco", "Hachoo!" )
  3491. GAME( 1988, iganinju, 0,        iganinju, iganinju, iganinju, ROT0,       "Jaleco", "Iga Ninjyutsuden (Japan)" )
  3492. GAME( 1988, kickoff,  0,        kickoff,  kickoff,  0,        ROT0,       "Jaleco", "Kick Off (Japan)" )
  3493. GAME( 1988, lomakai,  0,        lomakai,  lomakai,  0,        ROT0,       "Jaleco", "Legend of Makai (World)" )
  3494. GAME( 1988, makaiden, lomakai,  lomakai,  lomakai,  0,        ROT0,       "Jaleco", "Makai Densetsu (Japan)" )
  3495. GAME( 1988, p47,      0,        p47,      p47,      0,        ROT0,       "Jaleco", "P-47 - The Phantom Fighter (World)" )
  3496. GAME( 1988, p47j,     p47,      p47,      p47,      0,        ROT0,       "Jaleco", "P-47 - The Freedom Fighter (Japan)" )
  3497. GAME( 1993, peekaboo, 0,        peekaboo, peekaboo, 0,        ROT0,       "Jaleco", "Peek-a-Boo!" )
  3498. GAME( 1989, plusalph, 0,        plusalph, plusalph, plusalph, ROT270,     "Jaleco", "Plus Alpha" )
  3499. GAME( 1990, rodland,  0,        rodland,  rodland,  rodland,  ROT0,       "Jaleco", "RodLand (World)" )
  3500. GAME( 1990, rodlandj, rodland,  rodland,  rodland,  rodlandj, ROT0,       "Jaleco", "RodLand (Japan)" )
  3501. GAME( 1989, stdragon, 0,        stdragon, stdragon, stdragon, ROT0,       "Jaleco", "Saint Dragon" )
  3502. GAME( 1992, soldamj,  0,        soldamj,  soldamj,  soldam,   ROT0,       "Jaleco", "Soldam (Japan)" )
  3503. GAME( 1988, tshingen, 0,        tshingen, tshingen, tshingen, ROT0,       "Jaleco", "Takeda Shingen (Japan)" )
  3504.